本文首发于公众号:符合预期的CoyPanjavascript
Node.js 前不久发布了v13.2.0,宣布开始支持ES modules。在此以前,想要在node中使用ES modules,须要添加--experimental-module
。v13.2.0版本后,能够直接使用ES modules了。html
想要在项目中使用ES modules,有如下两种方法:java
一、文件后缀名使用.mjs
node
举个例子,假设项目目录以下:shell
.
|____component
| |____a.mjs
|____index.mjs
复制代码
文件内容以下:json
// component/a.mjs
let a = 'This is component a';
export default a;
// index.mjs
import a from './component/a.mjs';
console.log(a);
复制代码
执行node index.mjs
,代码能够正确执行,输出以下:api
(node:77465) ExperimentalWarning: The ESM module loader is experimental.
This is component a
复制代码
二、文件依然使用.js
的后缀名,在项目的package.json
中设置:type:module
bash
项目目录以下:app
.
|____component
| |____a.js
|____package.json
|____index.js
复制代码
各个文件内容以下:ui
// component/a.js
let a = 'This is component a';
export default a;
// index.js
import a from './component/a.mjs';
console.log(a);
// package.json
{
...
"type": "module", // 必需要有这一行
...
}
复制代码
执行node index.js
,代码能够正确执行,输出以下:
(node:78977) ExperimentalWarning: The ESM module loader is experimental.
This is component a
复制代码
若是在命令行使用ES module,须要加上--input-type=module
。举个例子:
node --input-type=module --eval "import { sep } from 'path'; console.log(sep);"
复制代码
须要注意的是,目前,ES module的实现仍是实验性质的,后续有随时调整的可能。
import引入ES module时,支持如下几种方式:
./file.mjs
)file:///opt/app/file.mjs
)es-module-package’
)es-module-package/lib/file.mjs
)另外,使用import引用ES module时,能够像这样使用:
import _ from ‘es-module-package’
import { shuffle } from ‘es-module-package
import * as fs from ‘fs
全部的Node内置模块,例如fs
和path
,均支持上述三种方式来引用。
import也能够引入Commonjs的模块,包含如下两种状况:
.cjs
例如代码目录以下:
.
|____component
| |____a.cjs
|____package.json
|____index.js
复制代码
文件内容以下:
// component/a.cjs
let a = 'This is component a';
console.log('aaaa');
module.exports = a;
// index.js
import a from './component/a.cjs';
console.log(a);
// package.json
{
...
"type": "module",
...
}
复制代码
执行node index.js
,代码能够正确执行,输入以下:
(node:81677) ExperimentalWarning: The ESM module loader is experimental.
aaaa
This is component a
复制代码
"type": "module"
或设置"type": "commonjs"
。 例如代码目录以下:.
|____component
| |____a.js
| |____package.json
|____package.json
|____index.js
复制代码
文件内容以下:
// component/a.js
let a = 'This is component a';
console.log('aaaa');
module.exports = a;
// component/package.json
{
"type": "commonjs" // 也能够不设置type字段
}
// index.js
import a from './component/a.js';
console.log(a);
// package.json
{
...
"type": "module",
...
}
复制代码
执行node index.js
,代码能够正确执行,输入以下:
(node:81677) ExperimentalWarning: The ESM module loader is experimental.
aaaa
This is component a
复制代码
本文经过示例,简单介绍了Node.js中ES Module的相关使用方法,更多详细介绍请参考官方文档: