描述 node 中使用 ES6 语法,很简单,网上的文章写的太复杂,我根据网上的经验折腾了一下午,最后终结了下,几乎装个 babel 就能用的。 下面是我的使用过程,分享如何使用及遇到的问题。
配置环境 首先的有node
环境,这个不介绍,当前我的版本是8.11.4
1.初始化
2.安装 babel 安装官网上介绍的操作就行,https://www.babeljs.cn/
1 npm install --save-dev babel-cli babel-preset-env
创建 .babelrc
文件
这时候已经配置完了,可以执行 ES6 语法了,但是import
和export
还是不支持的。
检测对es6
的支持情况 安装es-checker
来帮助我们查看对 es6 的支持情况。
1 npm install --save-dev es-checker
借助npx
工具来运行es-checker
npx
的介绍可以看这篇文章:http://www.ruanyifeng.com/blog/2019/02/npx.html
结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ECMAScript 6 Feature Detection (v1.4.1) Variables √ let and const √ TDZ error for too-early access of let or const declarations √ Redefinition of const declarations not allowed √ destructuring assignments/declarations for arrays and objects √ ... operator ...省略内容 Module × Module export command × Module import command ========================================= Passes 39 feature Detections Your runtime supports 92% of ECMAScript 6 =========================================
可以看到还是有一些不支持的。
测试 code .babelrc
上面的配置其实就行了;但是我在看 babel 的文档时说设置 node 环境需要设置 targets,于是我的配置如下,但是我试了上面的配置也是可以的,下面的仅供参考。
1 2 3 4 5 6 7 8 9 10 11 12 { "presets" : [ [ "env" , { "targets" : { "node" : "current" } } ] ] }
package.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 { "name" : "node" , "version" : "1.0.0" , "description" : "" , "main" : "index.js" , "scripts" : { "test" : "echo \"Error: no test specified\" && exit 1" }, "keywords" : [], "author" : "" , "license" : "ISC" , "devDependencies" : { "babel-cli" : "^6.26.0" , "babel-preset-env" : "^1.7.0" , "es-checker" : "^1.4.1" } }
Stack.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 const Stack = (function ( ) { const items = new WeakMap (); class Stack { constructor () { items.set(this , []); } push(value) { let stack = items.get(this ); stack.push(value); } pop() { let stack = items.get(this ); return stack.pop(); } isEmpty() { let stack = items.get(this ); return stack.length === 0 ; } size() { let stack = items.get(this ); return stack.length; } print() { let stack = items.get(this ); console .log(stack.toString()); } } return Stack; })(); module .exports.Stack = Stack;
index.js
1 2 3 4 5 const { Stack } = require ("./Stack.js" );let stack = new Stack();stack.push("aaa" ); stack.print();
在控制台中执行
输出
解决 import 和 export 不能用 其实node
版本 9 以上就已经支持了,但是需要把文件名改成*.mjs
,并且加上--experimental-modules
选项。
升级 node 介绍一个 node 升级的好工具,名字就叫n
,具体可以去 npm 上查看。
执行如下命令进行升级
结果
1 2 3 4 5 install : node-v11.12.0 mkdir : /usr/local /n/versions/node/11.12.0 fetch : https://nodejs.org/dist/v11.12.0/node-v11.12.0-darwin-x64.tar.gz installed : v11.12.0
升级成功后,① 把文件都改成*.mjs
,② 并把代码改成import
和export
的方式,执行
1 node --experimental-modules arithmetic/index.mjs
上面两步都不能少。不然就执行不成功。