es6版electron程序vscode调试,babel-register如何使用
发布于 作者:苏南大叔 来源:程序如此灵动~对于es6
版本的electron
程序来说,如果不编译的话,目前来说,可能会有各种各样的Unexpected token
之类的问题。那么,这个时候,就需要babel
来上场救火。而babel
的衍生品实在是多的不可数,那么在上一篇文章中,苏南大叔已经举例了两种用法。那么在本篇文章中,苏南大叔将继续描述babel-register
的更高级用法。
本文测试环境:win10
/electron-quick-start-es6
/babel
/babel-register
。
特别说明
本文前置阅读内容是:
苏南大叔个人认为:对于vscode
+electron
+es6
的组合来说,babel-register
可能就仅适合用于调试。对于成品,还是老老实实的先用babel
转为实体文件,比较好些。babel-register
仅仅是个实时的es6
转化,并没有实体文件生成。
项目描述
项目使用了es6
的典型函数import
,分布存在于主进程和渲染进程中。
main.js
:
//const electron = require('electron')
//const app = electron.app
//const BrowserWindow = electron.BrowserWindow
import { app, BrowserWindow } from 'electron'
用一个import
代替了2个const
,属于es6
写法。
renderer.js
:
import { sayHello } from './helper.js';
sayHello('world')
helper.js
:
export function sayHello(target) {
console.log(`hello ${target}!`)
}
.vscode/launch.json
:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Main Process",
"type": "node",
"request": "launch",
"cwd": "${workspaceRoot}",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
"windows": {
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd"
},
"sourceMaps": true,
"runtimeArgs": [
"-r",
"babel-register",
],
"program": "${workspaceRoot}/main.js",
"protocol": "inspector"
},
{
"name": "Debug Renderer Process",
"type": "chrome",
"request": "launch",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
"windows": {
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd"
},
"runtimeArgs": [
"-r",
"babel-register",
"http://localhost:4000",
//"--remote-debugging-port=9222"
],
"timeout": 2000,
//"port":9222,
"sourceMaps": true,
"webRoot": "${workspaceRoot}"
}
]
}
注意开启sourcemap
为true
。
安装依赖项
npm i -D babel-core
npm i -D babel-loader
npm i -D babel-preset-es2015
npm i -D babel-preset-stage-0
npm i -D babel-register
设置.babelrc
:
{
"presets": [
"es2015","stage-0"
],
"sourceMaps": true,
"retainLines": true
}
注意开启sourcemap
为true
。
babel-register
的使用
在上一篇文章中,为了vscode
调试,苏南大叔把babel-register
放在了html
的script
区域进行require
使用,并且,每个html
都需要require
。
index.html
:
<script>
require("babel-register");
require("./renderer.js");
</script>
在本篇文章中,苏南大叔换一种用法,就是不修改相关html
的代码,并且相关js
文件,依然使用es6
语法。修改的文件是.vscode/launch.json
。对于electron
传递个参数-r babel-register
。这样的话,所有的主进程和渲染进程,就都可以自由使用es6
语法了。不过,当然,这个是需要配合.babelrc
文件的。
.vscode/launch.json
:
{
//...
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
"windows": {
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd"
},
"sourceMaps": true,
"runtimeArgs": [
"-r",
"babel-register",
],
"program": "${workspaceRoot}/main.js",
//...
}
全部内容见顶部,这里仅仅突出重点部分。重点就是:
"runtimeArgs": [
"-r",
"babel-register",
],
注意顺序,注意单独成行。这样写就相当于执行了下面的命令行:
node_modules\.bin\electron.cmd -r babel-register ./
注意-r
和babel-register
是分开写的,网上流传的教程都是合并到一起写的,这样并不生效!大家可以注意查看vscode
调试时的命令输出。对比一下,就可以看出区别来。
总结
在runtimeArgs
中设置babel-register
之后,就可以在使用了es6
的electron
中,无忧无虑的调试了。but!记住,这里仅仅时调试,最终的成品,还是需要转化为es5
的。所以,还是不要忘记babel-cli
的存在哦!
如果您没有查看前几篇文章的话,本篇文章您可能会看得比较费劲,那么请查看相关文章吧。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
请教一下,为什么我已经根据文章所说的安装了 babel-register 而且根据文章配置了 launch.js 还是会报 import 的语法错误呢?我用的electron 版本是2.10.0
本文只是说的是调试模式哦,说的并不是打包之后的哦。你确认你是在调试么?你确认每个参数都正确设置了么?