如何在 node.js/webpack 中隐藏子项目的node_modules?



我有两个 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/

最新更新