是否有可能通过创build新的(未发布的)“子”包来打破(发布)包的依赖列表?

我维护一个在npmregistry上发布的JavaScript库,它有很多的依赖关系。 跟踪代码的哪一部分取决于哪些外部包是很难的。

不幸的是lernayarn的工作区, 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,那么lernayarn的工作空间只能提供帮助。 但在我的情况下,发布本地包example-lib-subpackage到npmregistry没有任何意义。

此外, npm linknpm的本地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,那么lernayarn的工作空间只能提供帮助。 但在我的情况下,发布本地包example-lib-subpackage到npmregistry没有任何意义。

我不认为你会find一个合理的解决scheme(如果你正在试图用npm来完成非标准的事情),我很好奇你为什么要排除example-lib-subpackage将其装入自己的回购 – 这似乎是显而易见的解决scheme。