库的配置与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
-
在上一条的基础上如果指定库的
node
的exports
为esm
,那么import
的是esm
-
评论