(node9以前)
nodeJs雖然可以實現(xiàn)99%的ES6的新特性,但是在NodeJs中使用ES6的import/export仍然有一定的困難.
雖然不能直接使用,但是可以間接使用.
使用轉(zhuǎn)換器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)也即運行的時候變?yōu)?
node xx.mjs
-
在package.json文件中添加字段,聲明為模塊
type: "module"
以上方式是nodeJs對es6模塊使用的解決方式
(node9以后)
node9提供了在flag模式下使用ECMAScript Modules,使得可以不用使用工具babel進行轉(zhuǎn)換也可以直接使用es6 import/export
node9之后版本不斷改善對ECMAScript Modules的支持,直到現(xiàn)在2021-6-23發(fā)布的 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規(guī)范去解析Js代碼的,如果要使用ECMAScript Modules也即es6中的import/export來解析JS代碼,可以采用以下方式:
-
將js文件擴展名改為:
.mjs,并且在package.json文件中加入以下字段:type: "module"
如果沒有
package.json文件,使用以下命令進行創(chuàng)建: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.