我有两个 Vue 3 项目——一个库和一个主项目。
库
我把这个项目构建为 Vue 3 库
vue-cli-service build --target lib --name index src/index.common.ts
在这个项目中,我使用js-joda
:
"dependencies": {
"@js-joda/core": "^5.2.0",
...
}
为了从 webpack bundle 中删除库的node_modules
,我在库vue.config.js
中执行以下操作:
const nodeExternals = require('webpack-node-externals');
...
configureWebpack: config => {
config.target = 'node';
config.externalsPresets = { node: true };
config.externals = [nodeExternals()];
},
主项目
我也在这个项目中使用js-joda
,因为我的库是本地的,所以我有以下内容package.json
:
"dependencies": {
"@js-joda/core": "^5.2.0",
"my-lib": "file:./../../my-lib",
...
}
问题当我
构建main project
时,使用我上面描述的配置,JS包中包含js-joda
库的两个版本。一个版本取自main-project/node_modules
,另一个版本取自my-lib/nodes_modules
。结果,我有不同的函数instances
具有相同的名称,这在我的代码中给了我错误的结果。
如果我在构建main project
之前删除my-lib/nodes_modules
那么一切都很好。但是,在构建main project
之前每次都这样做并不是一个好的解决方案。此外,我同时在两个项目中工作。
谁能说,我怎样才能以更好的方式向main project
隐藏my-lib/nodes_modules
?
在您的库中,您应该在peerDependencies
下列出js-joda
,而在主项目中,您应该在dependencies
下列出js-joda
。
欲了解更多信息 - https://nodejs.org/es/blog/npm/peer-dependencies/