nodejs中cjs和esm模块相互操作(记录)

释义:

  • cjs:commonjs模块规范
  • esm:es6模块规范
  • cjs类型文件:文件中使用了cjs的模块语法
  • esm类型文件:文件中使用了esm的模块语法

nodejs中默认为cjs规范

  1. 在nodejs中想要直接执行或者引用esm类的文件,需要把该文件的后缀改为 .mjs;或者把你的package.json文件(如果有)中的type字段配置成‘module’。但是、但是、但是: package.json的type如果你没配置过,那么其实默认是‘commonjs’,如果改成了’module‘,那么所有cjs类的文件,后缀都要改成 .cjs,也就是和上面提到的改mjs正相反,可以理解为nodejs默认是cjs规范,要是改了’type‘模块规范字段,那么 .js文件就会被认为遵循了该种规范,而另一种规范的文件就必须改文件后缀才能使用。
  2. cjs类的文件要想使用esm类的文件,只能使用import()语法引入。类似import和require()都不可以用来引入。
  3. esm类的文件中,无法使用cjs的模块语法,比如require(),module.exports。
  4. esm类的文件可以直接使用import、import()语法引入cjs类的文件;支持命名导入和默认导入。

注:现在有了类似rollup类的打包工具,可以在开发源码时完全使用纯esm规范写,而打包时选择生成cjs规范的包,当然现在越来越倾向于Pure ESM,即完全使用纯esm模块规范开发和打包,值得讨论和关注。

你可能感兴趣的:(javascript,前端,ecmascript,node.js)