库的配置与node文件模块对应关系(实验)

库基础配置

package.json

{
  "main": "dist/index.cjs.js",
  "module": "dist/index.js"
}

库基础配置+exports

package.json

{
  "main": "dist/index.cjs.js",
  "module": "dist/index.js",
  "exports": {
    ".": {
      "import": {
        "node": "./dist/index.mjs",
        "default": "./dist/index.js"
      },
      "require": "./dist/index.cjs.js"
    }
  }
}

结果

模块 .js .mjs
cjs(require) index.cjs.js
esm(import) ✓ (使用import 实际加载的是 index.cjs.js,pkg:main)
esm(import)(库基础配置+exports index.mjs pkg:exports.node
esm(import):type:"module"(当前项目) index.cjs.js,可以使用 import,pkg:main index.cjs.js,pkg:main
esm(import):type:"module"(当前项目)+ esm(库基础配置+exports index.mjs ,pkg: exports.node index.mjs,pkg:exports.node

结论:

  • mjs

    • 不能使用require,但是import的是cjs(库未做任何处理)

    • 如果库做了exports配置,且指向esm,那么导入的是esm

  • cjs

    • 不能使用import

    • package.json加上type:"module"后可以使用import,但是加载的仍然是cjs

    • 在上一条的基础上如果指定库的nodeexportsesm,那么import的是esm

评论

0 / 800
全部评论()