2016-10-20 13 views
6

私はこの3つのローカルnpmパッケージ:C:\projects\A,C:\projects\BおよびC:\projects\mainを持っています。 MainはWebpackで構築されたReactアプリです。 MainABに依存し、ABに依存します。私たちは、パッケージが同じ親フォルダに置かれることを保証する独自の "グローバル"パッケージマネージャを持っています。私はMainnpm installに私はAまたはBローカルパッケージに依存するNPMパッケージを正しく設定してください

を変更するたびに必要としない

  1. ノードの(とのWebPACKの)requireが解決されるローカルパッケージ

  2. は、私はこれらを合わせたいです

私はこれをMainpackage.json

.... 
"dependencies": { 
    "A": "file:../A", 
    "B": "file:../B", 
    "react": ... 
    ......... 

しかし、奇妙な問題に遭遇した:WebPACKのビルドが失敗したのでnpmは、A年代とBさんnode_modules内のすべてのパッケージをインストールしません。そして毎回npm installを実行する必要があります。

Google検索でlinklocalが見つかりました。すべてのローカルパッケージをシンボリックリンクとして置き換えています。一度NPMの間にインストールしてから、再びだから、リンクローカル

後:あなたは一般的に二回リンク依存関係の依存関係をインストールしてしまうなど、

リンクローカルは、リンクされた依存関係の依存関係をインストールしません。しかし、別の問題に遭遇しました私はlinklocalを実行し、次にpostinstallスクリプトでnpm installを再度実行しました。しかし、3 @ NPMは、シンボリックリンクフォルダに何もしませんでした。

npm WARN update-linked node_modules/A needs updating to 1.0.0 from 1.0.0 but we can't, as it's a symlink 

その後、私はすべてのシンボリックリンクモジュールに移動して、そこからnpm installを実行するためにpostinstallを変更することを決めました。そして、それは最初の視点で働いた。インストールはうまくいっていた。しかし、WebpackはReact(禁止されている)の2つのコピーをバンドルし始めました。

パッケージを正しく設定するにはどうすればよいですか?

答えて

0

あなたは、..だからあなたの地域の開発バージョンにシンボリックリンクを維持するために、ローカル

npm linkを使用公表パッケージが実際に住んでどこを指すようにMainpackage.jsonをリセットすることができます。

"dependencies": { 
    "A": "<PUBLISHED_PACKAGE_REPO>", 
    "B": "<PUBLISHED_PACKAGE_LOCATION>", 
    "react": ... 

これ性を保証は、あなたのプロジェクトはCI /他のマシンなどで常に構築される

次に、あなたの「プロジェクトA」ディレクトリに移動し、リンクを作成します。

cd projects\A 
npm link 

これはC:\projects\Aを指すNPM特定のシンボリックリンクを作成します。

は、次にBのプロジェクトのために同じ操作を行います。あなたは今作成し、両方のプロジェクトへのリンクを持っている

cd projects\B 
npm link 

、ちょうど実際にあなたのMainプロジェクトにリンクする必要があります:A場合も

cd projects\Main 
npm link A 
npm link B 

Bに依存しているだけで、それらのプロジェクトをリンクするだけでいいです:

cd projects\A 
npm link B 
あなたが開発し、ちょうど解除してインストール package.jsonに指定されているものは何でも利用したい終わっている

:私は個人的に私の依存関係をパッケージ化するnpm packを使用して、インストールNPM `使用して私のメインのプロジェクトでそれらをインストール

cd projects\Main 
npm unlink A 
npm unlink B 
npm install 
0

。 /path/to/pack/result.tgzそれはAとBに行われたすべての変更を公開するために避けたが

npm installにあなたを防ぐことはできませんhere

として詳細Mainで、私は、パッケージAとパッケージBではAまたはB

1

を変更するたびに、あなたがプレインストールを持つことができます WebPACKのを実行するスクリプト。これにより、すべての依存関係が解決されるはずです。
パッケージ
wmlもチェックしてください。これは、ローカル依存関係の維持に役立ちます。

package.json:

"scripts": { "preinstall": "webpack" }

1

あなたが他のマシンでメインを構築する必要がない場合は、単にメイン/自分のプロジェクトでそのような何かを行うことができ

あなたが持っている可能性が
let C = require('C:\projects\A\index.js') 

require('C:\projects\A\index.js') 

別でブランチ:

require('C') 
関連する問題