众所周知,在 Node 中不能直接使用 ES6 模块。通常情况下是这样的,但是如果我们非要用 ES6 模块那也是可以滴。下面我就介绍两种在 Node 环境下使用 ES6 模块的方法。不过在此之前,你必须保证项目中 Node 的版本在 14 以上。
方法一:修改文件后缀名
在 Node 项目中使用 ES6 模块最简单的方法就是将.js
文件的扩展名替换为.mjs
。Node 在编译.mjs
文件时,将会使用ES6模块化规范
来处理代码,而不是使用默认的CommonJS模块化规范
。同时,你也可以用.cjs
文件扩展名告诉 Node 使用CommonJS模块化规范
处理代码。简而言之,你可以通过文件扩展名来告诉 Node 使用哪种模块化规范来处理代码,默认使用的是CommonJS
。
在 ES6 模块化的文件中导入 CommonJS 模块
Node 支持在ES6模块
中导入CommonJS模块
。例如:
// a.mjs
import test from 'b';
test.helloworld(); // hello world!
// b.cjs
module.exports = {
helloworld: function(){
console.log('hello world!');
}
}
但是反过来,在CommonJS模块
中导入ES6模块
在 Node 中不支持。如果非要在CommonJS模块
中使用ES6模块
,我们可以借助一些编译器来帮助我们把ES6模块
翻译成CommonJS模块
,从而实现导入。
方法二:配置 Package.json 文件
如果想要在整个项目中都使用ES6模块化规范
,一个一个更改文件扩展名太费劲了。我们可以通过在项目的package.json
文件中添加"type": "module"
。例如:
// package.json
{
"name": "ESM_Module",
"version": "1.0.0",
"description": "This is a test project",
"main": "index.js",
"type": "module", // 添加类型说明
"scripts": {
"start": "node index.js"
},
}
当我们在package.json
中添加"type": "module"
时,所有的文件都会被 Node 当作 ES6 模块文件来处理,除非该文件的扩展名为.cjs
。node_modules
文件夹中的依赖文件还是使用CommonJS
模块化规范处理,不会受到影响。