是否有可能通过创build新的(未发布的)“子”包来打破(发布)包的依赖列表?
我维护一个在npmregistry上发布的JavaScript库,它有很多的依赖关系。 跟踪代码的哪一部分取决于哪些外部包是很难的。
不幸的是lerna
, yarn
的工作区, npm link
或者npm
的本地path依赖声明都没有帮助。 (我解释了为什么之后)。
我希望能够通过提取一些依赖到新的“子包”来打破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
的依赖列表大大减less到;
// ~/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", ...
有没有人做到这一点? 这将是超级方便。
请注意,如果您将本地软件包发布到npmregistry,那么lerna
和yarn
的工作空间只能提供帮助。 但在我的情况下,发布本地包example-lib-subpackage
到npmregistry没有任何意义。
此外, npm link
和npm
的本地path依赖项function仅适用于未发布的包,但example-lib
需要位于npmregistry中。
将包发布到公共registry时不应使用本地path。
从https://docs.npmjs.com/files/package.json#local-paths引用
由于package.json
只是一个JS对象,所以在发布到NPM之前可以将其扩展。
在prepublish
:
- 更新软件包版本
- 删除package.json本地的
example-lib-subpackage
依赖项 - 使用
example-lib-subpackage
声明的那个扩展example-lib
依赖关系 - 可以select在更新的
package.json
运行一些testing - 发布
- 恢复原始的依赖对象
- 提交新版本
PouchDb遵循在这里和这里更详细描述的模糊相似的方法。
我以为你可以使用一个构build工具来维护多个package.json
,并将它们编译成真正的package.json
,但是你会在整个平台上进行交互。 你将不得不有自己的CLI进行安装,这将是一个烂摊子。
你说:
请注意,如果您将本地软件包发布到npmregistry,那么
lerna
和yarn
的工作空间只能提供帮助。 但在我的情况下,发布本地包example-lib-subpackage
到npmregistry没有任何意义。
我不认为你会find一个合理的解决scheme(如果你正在试图用npm来完成非标准的事情),我很好奇你为什么要排除example-lib-subpackage
将其装入自己的回购 – 这似乎是显而易见的解决scheme。