如何为多个npm存储库创建共享的package.json

时间:2016-09-08 07:44:41

标签: node.js npm

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

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

有可能吗?

3 个答案:

答案 0 :(得分:10)

不幸的是,npm不支持指定父package.json文件。这样的功能是proposed some time ago,但是npm维护者得出的结论是它应该通过外部工具实现。

当然你可以自己编写这样的工具。有一个可能的aporaches:

  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. 添加到应用的package.json,这将在安装后的挂钩后使用此共享依赖项:

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

答案 1 :(得分:0)

如果您使用包含所有共享依赖项的shared-dependencies创建新的存储库package.json,然后在npm中发布它,该怎么办?

之后,您将可以在每个主项目上执行npm i shared-dependencies,因此您将有权访问所有共享的依赖项。

答案 2 :(得分:0)

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