(node9以前)
nodeJs虽然可以实现99%的ES6的新特性,但是在NodeJs中使用ES6的import/export仍然有一定的困难.
虽然不能直接使用,但是可以间接使用.
使用转换器babel
安装npm包-babel,使用babel将js文件编译成nodejs支持的commonJs格式的代码.
下载-babel包:
npm install babel-register babel-preset-env -D
接着可以使用命令运行含有import/export语句的js文件
babel-node xx.js
以上的命令显然会有些麻烦,如果直接使用node xx.js
会报以下的错:

显然不支持,但是可以从报错提示可以看出解决方案:
-
将目标js文件后缀改为:
.mjs(nodejs实验特性 node --experimental-modules)也即运行的时候变为:
node xx.mjs
-
在package.json文件中添加字段,声明为模块
type: “module”
-
以上方式是nodeJs对es6模块使用的解决方式
(node9以后)
node9提供了在flag模式下使用ECMAScript Modules,使得可以不用使用工具babel进行转换也可以直接使用es6 import/export
node9之后版本不断改善对ECMAScript Modules的支持,直到现在2021-6-23发布的 v16.4.0版本文档上显示,nodeJS完全支持ECMAScript Modules
Node.js fully supports ECMAScript modules as they are currently specified and provides interoperability between them and its original module format, CommonJS.
翻译:
Node.js完全支持当前指定的ECMAScript模块,并提供它们与其原始模块格式CommonJS之间的互操作性。
但是NodeJs默认是使用commonJs规范去解析Js代码的,如果要使用ECMAScript Modules也即es6中的import/export来解析JS代码,可以采用以下方式:
-
将js文件扩展名改为:
.mjs,并且在package.json文件中加入以下字段:type: “module”
如果没有
package.json文件,使用以下命令进行创建:npm init -y
-
第二种方式:在flag模式下使用ECMAScript Modules,在该模式下,js文件扩展名还是要求必须是
.mjsnode --experimental-modules XX.mjs
但是只写以上的命令,还是会报错,只有在
package.json加个type字段才行.这方面还不是很懂为什么.原文:
Node.js treats JavaScript code as CommonJS modules by default. Authors can tell Node.js to treat JavaScript code as ECMAScript modules via the
.mjsfile extension, thepackage.json“type”field, or the–input-type` flag. See Modules: Packages for more details.

本文介绍了Node.js从早期版本到v16.4.0如何逐步改进对ES6模块的支持,包括使用转换器Babel的方法及直接支持ES6模块的方式。
4万+

被折叠的 条评论
为什么被折叠?



