Question
为什么使用 pacakge 名称从链接的本地 NPM pacakage(作为 ES 模块构建)导入可以工作?pacakge.json
有"main"
属性,但当它具有"module"
财产?
Setup
更具体地说,如果我们有以下设置:
-
exporter
:一个 Node.js 包,它是一个 ES 模块export
是某事(例如,使用export default
).
-
importer
:一个 Node.js 模块,试图import
what exporter
出口,使用import something from 'exporter'
.
- Using
npm link
本地链接exporter
to importer
.
Then:
- 如果出现以下情况,则安装程序成功运行
exporter
's package.json
使用main
财产。
- The setup run fails if
exporter
's package.json
uses the module
property.
- 此故障可以通过使用“修复”
import something from 'exporter/dist/bundle.js'
, 但这是不可接受的.
这是为什么?我想我做错了什么?
Code
exporter
|- webpack.config.js
|- package.json
|- /src
|- index.js
|- /dist
|- bundle.js
webpack.config.js
:
import path from "path";
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
export default {
mode: "development",
entry: "./src/index.js",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "dist"),
library: {
type: "module",
},
},
experiments: {
outputModule: true,
},
};
package.json
:
{
"name": "exporter",
"version": "1.0.0",
"main": "dist/bundle.js", <-- *** NOTE THIS LINE ***
"scripts": {
"build": "webpack"
},
"devDependencies": {
"webpack": "^5.51.1",
"webpack-cli": "^4.8.0"
},
"type": "module"
}
index.js
:
function util() {
return "I'm a util!";
}
export default util;
importer
|- package.json
|- /src
|- index.js
package.json
{
"name": "importer",
"version": "1.0.0",
"type": "module"
}
index.js
import util from 'exporter';
console.log(util());
Then:
- Linking:
⚡ cd exporter
⚡ npm link
⚡ cd importer
⚡ npm link exporter
- 执行:
⚡ node importer.js
I'm a util!
However, if exporter
's package.json
更改为:
{
"name": "exporter",
"version": "1.0.0",
"module": "dist/bundle.js", <-- *** NOTE THIS LINE ***
"scripts": {
"build": "webpack"
},
"devDependencies": {
"webpack": "^5.51.1",
"webpack-cli": "^4.8.0"
},
"type": "module"
}
Then:
- 执行:
⚡ node importer.js
Fails:
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'importer\node_modules\exporter\' imported from importer\src\index.js
But Why?