编写此篇总结时使用的node版本:v14.16.1
CommonJS模块规范
CommonJS是目前node默认的模块规范,CommonJS不支持导入导出多个模块
Example
module_a.js
module.exports = {
name: 'module_a',
print: (content) => {
console.log(content)
}
}
module_b.js
// 引入module_a.js
const moduleA = require('./module_a.js')
moduleA.print(moduleA.name)
ES6模块规范
ES6模块规范支持导入导出多个模块
开启支持
目前node并未默认支持ES6的模块规范,所以需要手动开启支持,开启ES6模块规范支持有两种方式
1、使用.mjs后缀
使用.mjs后缀,node会按照ES6的模块规范来检查该文件,此种方式看似比较灵活,不过ES6和CommonJS模块文件之间互相引用会有问题
2、调整配置
在package.json配置中增加type: “module”,则整个工程的文件均会按照ES6模块规范进行检查
Example
1、导入导出单个默认模块
module_a.mjs
// 输出单个默认模块
export default {
name: 'module_a',
print: (content) => {
console.log(content)
}
}
module_b.mjs
// 导入export default输出的模块,可自定义名称
import moduleA from './module_a.mjs'
moduleA.print(moduleA.name)
2、导入导出多个模块
module_a.mjs
const moduleA1 = {
name: 'module_a_1',
print: (content) => {
console.log(content)
}
}
const moduleA2 = {
name: 'module_a_2',
print: (content) => {
console.log(content)
}
}
// ES6可输出多个模块,可使用as关键字自定义名称
export {moduleA1, moduleA2}
module_b.mjs
// 导入export {}输出的多个模块,可使用as关键字自定义名称
import {moduleA1 as a1, moduleA2} from './module_a.mjs'
a1.print(a1.name)
moduleA2.print(moduleA2.name)