electron教程(番外篇二): 使用TypeScript版本的electron, VSCode调试TypeScript, TS版本的ESLint

   2023-03-08 学习力0
核心提示:electron教程(一): electron的安装和项目的创建electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范electron教程(番外篇二): 使用TypeScript版本的electron, VSCode调试TypeScript, TS版本的ESLintelectron

electron教程(一): electron的安装和项目的创建

electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范

electron教程(番外篇二): 使用TypeScript版本的electron, VSCode调试TypeScript, TS版本的ESLint

electron教程(二): http服务器, ws服务器, 子进程管理

electron教程(三): 使用ffi-napi引入C++的dll

electron教程(四): 使用electron-builder或electron-packager将项目打包为可执行桌面程序(.exe)

 

引言

 

这一篇将介绍:

1. 如何将electron替换为TypeScript.
2. 如何使用VSCode调试TypeScript.
3. 如何使用ESLint插件来检查TypeScript代码.

注: TSTypeScript的简称, 在本文中, 这两个名字的所指代的内容完全相同.

 

TS版本electron

 

1. 部署node.js+electron环境

按步骤完成electron教程(一): electron的安装和项目的创建所介绍的内容.

 

2. 安装TypeScript

在项目根目录, 执行指令:

npm install typescript -g

之后执行指令:

npm install @types/node --save-dev

此时TS就已经安装完成了

 

3. 创建TypeScript编译用配置文件

首先要知道,纯粹的TS源码是不能运行和调试的。

当我们要运行TS源码时,其实是利用TS源码生成了对应的JS源码, 以及一个sourcemap文件, 该文件保存着位置信息, 也就是转换后的JS代码的每一个位置, 所对应的转换前的TS位置.

.ts文件转换为.js文件所用的命令是tsc, 这条命令源自我们刚才安装的TypeScript编译器(npm install typescript -g).

例如在hello.ts文件所在的目录执行如下命令后:

tsc hello.ts

一旦编译成功,就会在相同目录下生成hello.jshello.js.map文件.

你也可以通过命令参数/修改配置文件来修改默认的输出名称和目录等.

现在我们通过修改配置文件来对tsc编译进行配置.

在项目根目录下, 创建tsconfig.json配置文件, 内容如下:

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es2019",
    "noImplicitAny": false, // 在表达式和声明上有隐含的'any'类型时报错, 最好之后改成true
    "sourceMap": true,
    "outDir": "./dist", // 输出目录
    "baseUrl": ".",
    "paths": {
      "*": ["node_modules/*"]
    }
  },
  "include": [
    "src/**/*"
  ]
}

可以看到这里指定了dist目录输出目录, 而来源是src目录,

它指明了: 将src目录下所有.ts文件, 编译为.js文件, 并且将.js文件, 放置在dist目录中, 其二级目录和多级目录, 和src目录保持一致.

 

4. 修改package.json, 添加src命令

修改package.json文件中的script脚本, 如下:

  "scripts": {
    "build": "tsc",
    "watch": "tsc -w",
    "start": "npm run build && electron ./dist/main.js"
  },

可以看到, 主要修改有3处:

  1. 添加build脚本, 内容为"tsc".
    即在当前目录运行tsc命令, 而tsc命令会依据刚才创建的tsconfig.json配置文件进行编译.

  2. 添加了watch脚本, 用于 // todo

  3. 修改start脚本.
    脚本内容分为两段, 用&&隔开.
    第一段为在当前命令执行npm run build指令, 也就是运行build脚本.
    第二段为electron ./dist/main.js, 即用electron启动dist目录下的main.js文件. 注意此时main.js文件位于dist目录, 因为该文件是tsc自动生成的, 生成在了dist目录中.

 

5. 创建preload.ts文件

在项目的src目录下, 创建preload.ts, 内容如下:

// All of the Node.js APIs are available in the preload process.
// It has the same sandbox as a Chrome extension.
window.addEventListener("DOMContentLoaded", () => {
  const replaceText = (selector: string, text: string) => {
    const element = document.getElementById(selector);
    if (element) {
      element.innerText = text;
    }
  };
  for (const type of ["chrome", "node", "electron"]) {
    replaceText(`${type}-version`, (process.versions as any)[type]);
  }
});

 

6. 创建main.ts文件

此时, 我们删除步骤1中在src目录下创建的main.js, 我们不再需要这个.js文件, 取而代之的是, main.ts文件, 内容如下:

import {app, BrowserWindow} from 'electron';
import * as path from 'path';
let mainWindow: Electron.BrowserWindow;
/**
 *
 */
function createWindow(): void {
  // Create the browser window.
  mainWindow = new BrowserWindow({
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
    },
    width: 800,
  });
  // and load the index.html of the app.
  mainWindow.loadFile(path.join(__dirname, '../html/index.html'));
  // Open the DevTools.
  mainWindow.webContents.openDevTools();
  // Emitted when the window is closed.
  mainWindow.on('closed', () => {
    // Dereference the window object, usually you would store windows
    // in an array if your app supports multi windows, this is the time
    // when you should delete the corresponding element.
    mainWindow = null;
  });
}
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow);
// Quit when all windows are closed.
app.on('window-all-closed', () => {
  // On OS X it is common for applications and their menu bar
  // to stay active until the user quits explicitly with Cmd + Q
  if (process.platform !== 'darwin') {
    app.quit();
  }
});
app.on('activate', () => {
  // On OS X it"s common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  if (mainWindow === null) {
    createWindow();
  }
});
// In this file you can include the rest of your app"s specific main process
// code. You can also put them in separate files and require them here.

 

7. 运行electron

此时, 我们已经完成了对electron的升级, TS版electron已经完工.

执行指令:

npm start

如果编译通过, 就会在dist目录下生成正确的main.js文件, main.js.map文件, preload.js文件和preload.js.map文件.
紧接着, electron程序自动启动.

 

使用VSCode调试TypeScript

 

1. 配置VSCode调试JavaScript

按步骤完成使用VSCode调试启动项目所介绍的内容.

 

2. 增加TypeScript配置

修改.vscode目录下的launch.json配置文件.

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Electron JS", // 配置方案名字, 左下角可以选
      "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
      "program": "${workspaceFolder}/src/mainJS.js", // electron入口
      "protocol": "inspector" // 默认的协议是legacy,该协议导致不进入断点
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Electron TS", // 配置方案名字, 左下角可以选
      "program": "${workspaceFolder}/dist/main.js", // 这里要写编译后的js文件, 即electron入口
      "preLaunchTask": "tsc: build - tsconfig.json",
      "sourceMaps": true, // 必须为true
      "outFiles": ["${workspaceFolder}/**/*.js"],
      "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
      "protocol": "inspector" // 默认的协议是legacy,该协议导致不进入断点
    }
  ]
}

我们在原来的基础上, 增加了TypeScript的调试配置方案, 取名为Electron TS.

 

3. 启用TypeScript配置

重新启动VSCode, 保证已经将项目目录复制到了VSCode工作区.

按照如下步骤, 启用ELectron TS配置方案.

electron教程(番外篇二): 使用TypeScript版本的electron, VSCode调试TypeScript, TS版本的ESLint

此时, VSCode会自动启动调试(F5). 如果你事先打了断点, 将进入断点, 如果没有打断点, 会直接启动electron程序.

 

使用ESLint插件来检查TypeScript代码

 

1. 部署node.js+electron环境

按步骤完成安装ESLint代码检查工具, Google JavaScript Style Guide所介绍的内容.

 

2. 安装TypeScript的ESLint依赖

执行指令:

yarn add @typescript-eslint/parser --save-dev

执行指令:

yarn add @typescript-eslint/eslint-plugin --save-dev

 

3. 修改VSCode配置文件setting.json

通过快捷键cmd + shift + P打开搜索, 输入setting, 按照图中所示, 选中首选项: 打开设置:

electron教程(番外篇二): 使用TypeScript版本的electron, VSCode调试TypeScript, TS版本的ESLint

setting.json中, 添加如下内容:

    "eslint.autoFixOnSave": true,
    "eslint.validate": [
        "javascript",
        "javascriptreact",
        {
            "language": "typescript",
            "autoFix": true
        }
    ]

 

4. 修改ESLint配置文件.eslintrc.js

.eslintrc.js修改`为如下内容:

module.exports = {
    "extends": ["google", "plugin:@typescript-eslint/recommended"],
    "parser": "@typescript-eslint/parser",
    "plugins": ["@typescript-eslint"],
    "parserOptions": {
        "ecmaVersion": 2018
        },
    "env": {
        "es6": true
        },
    rules: {
        "no-console": "off",
        "@typescript-eslint/indent": ["error", 2],
        "linebreak-style": ["error","windows"],
    }
};

 

5. 重启VSCode

重启后, ESLint生效.

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 项目中使用TypeScript的TodoList实例详解
    项目中使用TypeScript的TodoList实例详解
    目录为什么用todolisttodolist的ts化数据到视图实现handleTodoItemreadonly分类交叉类型新增功能联合类型可选属性数据转视图总结为什么用todolist现代的框架教程目前再也不是写个hello world那么简单了,而是需要有一定基础能力能够做到数据绑定、遍历、条件
    03-16
  • React之 hook / class 结合typescript笔记
    React之 hook / class 结合typescript笔记
    使用 create-react-app 开启 TypeScriptCreate React App 是一个官方支持的创建 React 单页应用程序的CLI,它提供了一个零配置的现代构建设置。当你使用 Create React App 来创建一个新的 TypeScript React 工程时,你可以运行 npx create-react-app my-app
    03-08
  • Angular基础(三) TypeScript
    Angular基础(三) TypeScript
       一、模仿Reddita) 运行ng new –ng4angular-reddit创建应用,从随书代码中复制样式文件,新建组件app-root,代码为:界面可以看到了:b) 对于界面输入的数据,获取的方式有点特别,使用了#newlink这样的语法,newlink是一个对象,现在代表就是所在的inp
    03-08
  • 使用 ESModule 和 TypeScript 构建 Node.js 环境
    使用 ESModule 和 TypeScript 构建 Node.js 环
    介绍由于我经常使用 React,所以我在前端接触过 Node.js,但我从未接触过后端。正常搭建环境的时候,不能使用import语句,变成了require语句,很不方便。我认为有各种各样的错误,所以如果你能指出它们,我将不胜感激。执行环境macOS 蒙特雷 ver12.5.1MacBook
    03-08
  • [个人发展] 我做了一个可以永远谈论任何事情的女士对话AI(TypeScript,Python)
    [个人发展] 我做了一个可以永远谈论任何事情的
    在个人发展中对话式人工智能服务 Eveki我做了虚构角色1这是一项以人工智能为特色的服务,可以再现并享受自然对话。这一次,作为第一个艾小姐发表了。请先尝试实物。服务概览与人工智能对话基本上只需输入您的信息是。对话是用女士的语言进行的,就像人类一样
    03-08
  • 使用 Node.js (TypeScript) 和 Azure Functions 创建无服务器 REST API,并获得 CosmosDB 更改源作为奖励。
    使用 Node.js (TypeScript) 和 Azure Functions
    介绍在本文中,我们将使用 azure 函数和 ComsmosDB 创建一个无服务器 REST API 应用程序。使用的语言是 Node.js/TypeScript。此外,由于我们使用 CosmosDB 作为数据库,因此我们将使用 Azure 函数触发器接收 Change Feed 事件作为奖励。创建资源创建资源组az
    03-08
  • 安装 TypeScript 并编译成JS
    安装 TypeScript 并编译成JS
    官网: https://github.com/microsoft/TypeScriptTypeScript是一种由微软开发的开源、跨平台的编程语言。它是JavaScript的超集,最终会被编译为JavaScript代码。TypeScript是一种应用级JavaScript语言。TypeScript为JavaScript添加了可选类型,支持针对任何浏
    03-08
  • 使用TypeScript,AngularJs和Web API构建基本的C
    原文地址:using typescript with angularjs and web api 版权归其作者所有.在这篇文章中我将向大家展示如何使用TypeScript,Angular Js 和Asp.net Web API 来构建一个基本的实现CRUD功能的Web应用程序. Typescript提供了一系列的功能来方便程序员构造和组织更
    02-10
  • Typescript 中类的继承
    Typescript中类的定义与继承与后端开发语言java/C#等非常像,实现起来非常方便,而且代码便于阅读。用Typescript写较大项目时是非常有优势的。/** * BaseClass */class BaseClass {constructor(name:string,age:number) {this.name=name;this.age=age;}name:s
    02-09
  • TypeScript实现设计模式——工厂模式
    上回用typescript实现了单例模式,这回来实现工厂模式。工厂模式又分为简单工厂模式、工厂方法模式以及抽象工厂模式。简单工厂模式简单工厂模式通常在业务比较简单的情况下使用,它有三个部分组成:工厂类、抽象产品类、具体产品类。抽象产品类abstract class
    02-09
点击排行