nodejs中使用ES6的import / export

(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

會報以下的錯:

F:\com_ziliao\note_imgs\import-export-01.png

顯然不支持,但是可以從報錯提示可以看出解決方案:

  • 將目標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文件擴展名還是要求必須是.mjs

    node --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 .mjs file extension, the package.json "type"field, or the--input-type` flag. See Modules: Packages for more details.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容