想要了解ES6模块化及其几个关键词的用法和区别可以看模块化标准【AMD】【CMD】【CommonJS】【ES6】以及 module.exports、exports、export、export default、require、import 间的理解概论
测试版本node v10.15.3
//async.js
;(async function a() {
let res = await new Promise(function(resolve) {
setTimeout(function() {
resolve(2)
}, 1000)
})
console.log(res)
})()
Administrator@DESKTOP-U41SHUG MINGW64 ~/Desktop/test
$ node async.js
2
//隔1秒输出了2,表明在v10.15.3中可以使用 async和await
默认支持async/await了
看了一下async/await的默认支持是从v7.6.0版本开始的,所以现在应该能放心使用
再测试一下import
//import.js
import { zs } from './cons'//导入js文件时不用加拓展名
console.log(zs)
//cons.js
let zs = {
name: '张三'
}
export { zs }
$ node import//执行js文件也默认不需要加拓展名:.js
报错
所以这版本还是不支持import 和export/export default
想要使用就得用babel,babel的方法使用百度有好多这里就不写了
还有一种方法是使用官网的写法:
将执行的js文件拓展名变为 mjs
如现在将 import.js 改为 import.mjs
并在node命令中 加上 --experimental-modules指令
如下:
//import.mjs
import { zs } from './cons'
console.log(zs)
//cons.js
let zs = {
name: '张三'
}
export { zs }
Administrator@DESKTOP-U41SHUG MINGW64 ~/Desktop/test
$ node --experimental-modules import //mjs文件在执行指令中依旧不需要加后缀
报错了
报错了,原因是每个使用了 import/export的依赖文件和被执行文件名都需要把拓展名改为.mjs,而不是只是被执行的文件需要改mjs如下
//import.mjs
import { zs } from './cons'
console.log(zs)
//cons.mjs
let zs = {
name: '张三'
}
export { zs }
Administrator@DESKTOP-U41SHUG MINGW64 ~/Desktop/test
$ node --experimental-modules import //mjs文件在执行指令中依旧不需要加后缀
{ name: '张三' }
执行成功