参考文章:https://www.51cto.com/article/715402.html
在node中支持两种模块方案:CommonJS(cjs) 和 ECMAScript modules(esm)
小结
- node 中可以通过 main 和 type: module | commonjs 来指定入口文件及其模块类型, exports 则是更强大的替代品,拥有更灵活的配置方式。
- 主流打包工具如 webpack rollup esbuild 则在此基础上增加了对 top-level module 的支持。
- TypeScript 则会先查看 package.json 中有没有 types 字段,否则查看 main 字段指定的文件有没有对应的类型声明文件。
- 当这些字段同时存在时,
browser
=browser+mjs
>module
>browser+cjs
>main
,查看分析过程
main
package.json 的 main 字段是最常见的指定入口文件的形式。当我们引用一个包的时候,它的入口文件就是 main 字段指向的文件。
{
"name": "@std/map",
"version": "1.0.0",
"description": "",
"main": "index.js"
}
但我们如何得知这个 index.js 文件是 cjs 格式还是 esm 格式呢?
一种方式是看后缀名是 cjs 还是 mjs,另一种方式是看 type 字段。
type
package.json 里提供了一个type字段用于标注用什么格式来执行.js文件。
{
"name": "@std/map",
"version": "1.0.0",
"description": "",