我维护了一个发布在 npm 注册表上的 JavaScript 库,它有很多依赖项。很难跟踪代码的哪一部分取决于外部包。
不幸的是,lerna
、yarn
的工作区、npm link
或 npm
的本地路径依赖都没有申报帮助。 (我在例子之后解释了原因。)
我希望能够通过将一些依赖项提取到新的“子包”中来分解 package.json
中声明的 dependencies
列表。
所以,不要有下面的依赖列表
// ~/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",
...
有人做到了吗?会 super 方便的。
请注意,lerna
和 yarn
的工作区功能仅在您可以将本地包发布到 npm 注册表时才有帮助。但在我的情况下,将本地包 example-lib-subpackage
发布到 npm 注册表没有意义。
另外,npm link
和 npm
的本地路径依赖功能仅适用于未发布但 example-lib
需要的包在 npm 注册表中。
Local paths [...] should not be used when publishing packages to the public registry.
最佳答案
由于 package.json
只是一个 JS 对象,您可以在发布到 NPM 之前对其进行扩展。
关于预发布
:
- 更新软件包版本
- 移除 package.json 本地
example-lib-subpackage
依赖 - 扩展
example-lib
依赖项与example-lib-subpackage
- 可选择对更新后的
package.json
运行一些测试
- 发布
- 还原原始依赖对象
- 提交新版本
关于javascript - 是否可以通过创建新的(未发布的) "sub"包来分解(发布的)包的依赖关系列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47182280/