2016-09-08 34 views
5

私は分離されたマイクロサービスを使用してアプリケーションを構築しています。それぞれ独自のリポジトリとnpmの依存関係があり、異なるサーバ上にある可能性があります。複数のnpmリポジトリに共有package.jsonを作成する方法

私はすべての依存関係をurlでアクセスできるグローバルpackage.jsonファイルに入れる方法を探しています。 そのようにして、すべての異なるマイクロサービスを実行せずに共有依存バージョンを更新できますそれらを1つずつ更新します。

可能ですか?

答えて

7

残念ながらNPMは、親package.jsonファイルの指定をサポートしていません。このような機能はproposed some time agoでしたが、npmのメンテナーは外部ツールによって達成されるべきであるという結論に達しました。

もちろん、あなたはこのようなツールを自分で書くことができます。すべての共有の依存関係を持つpackage.jsonファイルを含むライブラリを作成します

  1. :可能aporachesの一つがあります。この例では、shared-depsと呼ばれます。

  2. ローカルpackage.jsonファイルへの共有の依存関係を追加するmerge.jsスクリプトを作成し、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に追加します。あなたがnpm installを実行したときに

    "scripts": { 
        "postinstall": "node ./node_modules/a/merge.js" 
    } 
    
  4. 今、あなたの共有依存関係がインストールされますTOGエーテルはshared-depsライブラリ、あなたのpackage.jsonはその後更新されます。


+0

素晴らしい、ありがとう! –

+0

私は分かりません。これをpostinstallに入れると、インストールが完了した後にマージが行われ、マージされた依存関係はどのようにインストールされますか?これは、2 npmを連続して呼び出す必要があることを意味しますか? –

関連する問題