# node版本要求

node > 16.0.0

# package.json

增加一个字段

"type": "module"

# 通过package.json将所有js文件以ES Module去工作

在node的最新版本中,进一步支持了ES Module,在新版本中可以通过package.json添加一个type字段,将type字段设置为"module",这样就会将项目中所有的js文件就会以ES Module去工作了,我们就不用将扩展名改为mjs了

// package.json
{
    "type": "module"
}

// module.js
export const foo = "this is foo";
export const boo = "this is boo";

// index.js
import { foo, boo } from './module.js';
console.log(foo, boo);

执行:node index.js,打印结果:this is foo this is boo

如果没有设置package.json,则会报错Cannot use import statement outside a module

可见现在是以ES Module去工作。

# 注意事项

在配置了type之后,如果想要使用CommonJS规范是什么效果

// common.js
const path = require('path');
console.log(path.join(__dirname, 'foo'));

打印结果为:require is no defined

原因是:package.json中设置了type,所有js文件都以ES Module去工作,而ES Module中并没有提供require。

如果我们想要运行CommonJS,需要将文件扩展名改为cjs,此时我们再去执行就能按CommonJS规范来了。

// common.cjs
const path = require('path');
console.log(path.join(__dirname, 'foo'));

可以成功打印出地址。