bri*_*out 10 javascript node.js npm lerna yarnpkg
我维护一个在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": "*"
}
}
Run Code Online (Sandbox Code Playgroud)
我想将一些依赖项提取到一个新的本地包中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": "*"
}
}
Run Code Online (Sandbox Code Playgroud)
并且example-lib
依赖列表将大大减少到;
// ~/code/example-lib/package.json
{
"name": "example-lib",
"dependencies": {
"chalk": "*",
"example-lib-subpackage": "./packages/example-lib-subpackage",
"mz": "*",
"socket.io": "*"
}
}
Run Code Online (Sandbox Code Playgroud)
注意example-lib
现在如何取决于本地包example-lib-subpackage
;
...
"name": "example-lib",
"dependencies": {
...
"example-lib-subpackage": "./packages/example-lib-subpackage",
...
Run Code Online (Sandbox Code Playgroud)
有没有人实现过这个?这将是非常方便的.
请注意,lerna
和yarn
,如果您没有问题发布本地套餐到NPM注册表的工作区功能只能帮助.但在我的情况下,将本地包发布example-lib-subpackage
到npm注册表是没有意义的.
此外,npm link
并且npm
本地路径依赖性功能仅适用于未发布但example-lib
需要在npm注册表上的包.
将包发布到公共注册表时,不应使用本地路径[...].
我在想你可以使用构建工具来维护多个package.json
s 并将它们编译为真实的 - 但你会一直与平台作斗争。你必须有自己的 CLI 来安装,这会很混乱。
你说:
请注意,仅当您可以将本地包发布到 npm 注册表时,
lerna
和的工作区功能才会有帮助。yarn
但就我而言,将本地包发布example-lib-subpackage
到 npm 注册表是没有意义的。
我认为你不会找到一个完全有意义的解决方案(如果你正在尝试使用 npm 做完全非标准的事情),而且我很好奇为什么你要排除突破example-lib-subpackage
自己的做法回购-这似乎是显而易见的解决方案。