nodejs 中使用 ES6 module

JavaScript的两种模块

CJS:Node.js 专用的 CommonJS 模块。

ESM:ES6 模块。

模块差异

CommonJS 模块使用require()加载和module.exports输出,ES6 模块使用import和export。

require()是同步加载,后面的代码必须等待这个命令执行完,才会执行。import命令则是异步加载,或者更准确地说,ES6 模块有一个独立的静态解析阶段,依赖关系的分析是在那个阶段完成的,最底层的模块第一个执行。

Node.js 的区分

Node.js 要求 ES6 模块采用.mjs后缀文件名。也就是说,只要脚本文件里面使用import或者export命令,那么就必须采用.mjs后缀名。Node.js 遇到.mjs文件,就认为它是 ES6 模块,默认启用严格模式,不必在每个模块文件顶部指定”use strict”。

如果不希望将后缀名改成.mjs,可以在项目的package.json文件中,指定type字段为module。

{
   "type": "module"
}

一旦设置了以后,该目录里面的 JS 脚本,就被解释用 ES6 模块。

CommonJS 模块加载 ES6 模块

CommonJS 的require()命令不能加载 ES6 模块,会报错,只能使用import()这个方法加载。

(async () => {
  await import('./1.mjs');
})();

上面代码可以在 CommonJS 模块中运行。

模块异步加载

import('./2.js')
.then(module => {
console.log(module.cc);
})
.catch(err => console.error(err))

 

本文链接地址: nodejs 中使用 ES6 module

发表评论

电子邮件地址不会被公开。 必填项已用*标注