我有 3 个包 A、B、C,我正在开发的包 A 有 B 和 C 作为依赖项,但这里的问题是包 C 也依赖于包 B,下面描述案例的块。
所以我想将包 B 作为 A、C 内部的对等依赖项,但是这样它不起作用,当我尝试对包 A 运行前单元测试时,它总是会失败
Start testing for: /\.main.spec.js?/
module.js:549
throw err;
^
Error: Cannot find module 'B/user/model'
at Function.Module._resolveFilename (module.js:547:15)
at Function.Module._load (module.js:474:25)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (D:\workspace1\A\node_modules\@comp\C\lib\form\container.js:13:14)
at Module._compile (module.js:652:30)
at Module._extensions..js (module.js:663:10)
at Object.require.extensions.(anonymous function) [as .js] (D:\workspace1\A\node_modules\babel-register\lib\node.js:152:7)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (D:\workspace1\A\node_modules\@comp\C\lib\index.js:12:18)
at Module._compile (module.js:652:30)
at Module._extensions..js (module.js:663:10)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! Exit status 1
打包一个 package.json 文件
"dependencies": {
"@comp/C": "0.0.1"
}
"peerDependencies": {
"@comp/B": "0.0.1"
}
包 C 的 package.json 文件
"peerDependencies": {
"@comp/B": "0.0.1"
}
除此之外,在包 C 中,我不会直接从包中导入 B 函数
import X from '@comp/C'
而是我使用模块的绝对路径,例如: import X from 'C/X'
然后在 webpack 中我使用包 C 的别名,
alias:{
'C': path.resolve(__dirname, './node_modules/@comp/C/lib/app')
}
对于本地开发,它可以正常工作,但是如果推送包并尝试将它们作为单个包(包 A)使用,它将无法工作,并且会出现上述 npm 错误。
我做得对,还是有其他方法可以处理这种情况?