如何为多个npm仓库创建共享package.json?

16

我正在使用分离的微服务构建我的应用程序,每个服务都有自己的代码仓库和npm依赖,并且可能在不同的服务器上。

我正在寻找一种将所有依赖项放入一个全局的 package.json 文件中并通过url访问的方法, 这样,我就可以更新共享的依赖版本,而无需逐个运行所有不同的微服务并单独更新它们。

这种做法可行吗?

3个回答

19

很遗憾,npm不支持指定父级package.json文件的功能。虽然这个功能在一段时间前曾被提出,但npm的维护人员得出结论,这应该由外部工具实现。

当然,你可以自己编写这样的工具。以下是其中一个可能的方法:

  1. 创建包含所有共享依赖项的package.json文件的库。在此示例中,它将被称为shared-deps

  2. 创建merge.js脚本,将共享依赖项添加到本地package.json文件中,并将其添加到shared-deps库中:

    const fs = require('fs')
    
    const localPackageJson = require('../../package.json')
    const sharedPackageJson = require('./package.json')
    
    Object.assign(localPackageJson.dependencies, sharedPackageJson.dependencies)
    
    fs.writeFileSync('../../package.json', JSON.stringify(localPackageJson, null, 2))
    
  3. 将以下的 post-install hook 添加到使用这些共享依赖项的应用程序的 package.json 中:

  4. "scripts": {
       "postinstall": "node ./node_modules/a/merge.js"
    }
    
  5. 现在,当您运行npm install时,您的共享依赖项将与shared-deps库一起安装,您的package.json将随后更新。


9
我不明白。如果这被放置在 "postinstall" 中,那么合并将在安装完成后进行,那么合并后的依赖项如何安装?这是否意味着需要连续调用2次 npm install? - JR Utily

1
如果您创建一个名为shared-dependencies的新存储库,并在其中包含所有共享依赖项的package.json,然后将其发布到npm上,那么您就可以在每个主项目上执行npm i shared-dependencies,从而可以访问所有共享依赖项。

0

还有dry-dry。它允许您在一个包中定义常见的package.json条目,并从项目中的每个包中链接到它。


1
这个库没有星星,已经死了好几年了,也没有更新。 - vsync

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接