欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES Module在nodeJS下与CommonJS的交互

程序员文章站 2022-04-25 15:46:52
...

一、ES Module导入CommonJS

// es-module.mjs
import mod from "./common.js"
console.log(mod)
// common.js
module.exports = {
	foo:"this is foo"
}

执行node --experimental-modules es-module.mjs,打印结果如下:
ES Module在nodeJS下与CommonJS的交互
得出结论,ES Module中可以导入CommonJS模块。

// common.js
exports.foo = "this is foo"

执行node --experimental-modules es-module.mjs,打印结果与之前一致。

注意,CommonJS始终只会导出一个默认的成员。

// es-module.mjs
import { foo } from './common.js'
console.log(foo)

结果如下:
ES Module在nodeJS下与CommonJS的交互
意思大概就是common.js并没有导出一个叫foo的命名成员。

所以不能直接提取CommonJS模块中的成员。也再次说明,import不是对导出对象的解构

二、CommonJS导入ES Module

// es-module.mjs
export const bar = "this is bar"
//common.js
const mod = require("./es-module.mjs")
console.log(mod)

执行:node --experimental-modules common.js,结果如下:
ES Module在nodeJS下与CommonJS的交互
报错的意思大概就是:不能通过require的方式去载入一个ES Module模块。

在node环境中不允许在CommonJS中通过require方式去载入ES Module模块,但是在其他环境例如webpack打包环境是可以的。

三、总结

  1. ES Module可以导入CommonJS模块
  2. CommonJS中不能导入ES Module模块
  3. CommonJS始终只会导出一个默认成员
  4. 注意import不是解构导出对象