众所周知,在 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模块化规范处理,不会受到影响。