我维护了一个发布在 npm 注册表上的 JavaScript 库,它有很多依赖项。很难跟踪代码的哪一部分取决于外部包。
不幸的是lerna
, 、yarn
的工作区、npm link
或npm
的本地路径依赖声明都没有帮助。(我在示例之后解释了原因。)
我希望能够通过将一些依赖项提取到新的“子包”中来分解dependencies
声明的列表。package.json
因此,而不是具有以下依赖项列表
// ~/code/example-lib/package.json
{
"name": "example-lib",
"dependencies": {
"lodash": "*",
"request": "*",
"chalk": "*",
"bluebird": "*",
"mz": "*",
"moment": "*",
"socket.io": "*",
"socket.io-client": "*",
"react": "*",
"react-dom": "*"
}
}
我想将一些依赖项提取到一个新的本地包example-lib-subpackage
中。对于本地,我的意思是example-lib-subpackage
它只能被example-lib
.
example-lib-subpackage
的依赖列表是;
// ~/code/example-lib/packages/example-lib-subpackage/package.json
{
"name": "example-lib-subpackage",
"dependencies": {
"lodash": "*",
"request": "*",
"bluebird": "*",
"moment": "*",
"socket.io-client": "*",
"react": "*",
"react-dom": "*"
}
}
和example-lib
的依赖列表将大大减少到;
// ~/code/example-lib/package.json
{
"name": "example-lib",
"dependencies": {
"chalk": "*",
"example-lib-subpackage": "./packages/example-lib-subpackage",
"mz": "*",
"socket.io": "*"
}
}
注意example-lib
现在如何依赖于本地包example-lib-subpackage
;
...
"name": "example-lib",
"dependencies": {
...
"example-lib-subpackage": "./packages/example-lib-subpackage",
...
有没有人做到这一点?这将是超级方便。
请注意,lerna
andyarn
的工作区功能仅在您可以将本地包发布到 npm 注册表时才有帮助。但在我的情况下,将本地包发布example-lib-subpackage
到 npm 注册表没有意义。
此外,npm link
andnpm
的本地路径依赖功能仅适用于未发布但example-lib
需要位于 npm 注册表上的包。
将包发布到公共注册表时,不应使用本地路径 [...]。