nodejs中使用ES6的import / export

(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

会报以下的错:

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

显然不支持,但是可以从报错提示可以看出解决方案:

  • 将目标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文件扩展名还是要求必须是.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.

你可能感兴趣的:(nodejs中使用ES6的import / export)