2015-01-04 10 views
8

各プロジェクトのnpmモジュールをローカルにインストールしてvendor/node_modulesにしてpackage.jsonファイルに表示する方法を教えてください。ベンダーにnode_modulesをインストールしてください

私はバウアーを持って.bowerrcに私はbower_componentsパス指定ベンダーのフォルダに

をpackage.jsonを移動したくない - 超簡単です。

npmでどうすればいいですか?

私はdocs、npmrcドキュメント、ここでいくつかの質問を読んで、googled、1時間以上を無駄に - まだ運がない。このような簡単な作業では、これはばかげて難しいです。

私はマイナスについては気にしませんが、最終的にそれを行う方法を教えてください。

答えて

2

組み込みのnpm機能を使用することはできません。

This discussion(npm githubリポジトリにあります)は、この問題をカバーしています。 FAQの一部であるthis answerにも記載されています。

あなたはまだあなたの/vendorディレクトリにモジュールをコピーしてrequire("./vendor/whatever")構文を使用してそれらを呼び出すことで、「手動」インストールを行うことができます...それはあなたの新しいカスタムの場所を使用する必要があるrequireそれぞれを意味します。これを処理するにはいくつかの方法がありますが、それらはすべて、あなたのソースで余分な作業をしてカスタムの場所に対応していることを意味します。

preinstall.js:何が任意のサブフォルダ内node_modulesフォルダにインストールする方法で構築することがあるようですないという事実でイライラ

+0

**あなたがすることはできません。** 'npm'は、ここでは詳述パッケージを見つけるためのノードのアルゴリズムを使用しています。 変更する必要がありますあなたの'node'バイナリを" vendor/node_modules "に対応させるためには –

+0

本当ですが、npmはカスタムディレクトリにもインストールされません。ノードがさまざまなnode_modulesの場所を参照する前に使用する必要のあるパスを指定することはできますが、npmはnode_modules以外の場所をインストールしません。ですから、npmを使わずにノードプロジェクトを技術的に書くことはできますが、すべての要求に対してすべてのパスをハードコードする必要があります。 –

9

は、私は2つの次のスクリプトを使用して卑劣な解決策を考え出しました

var fs = require("fs"); 
try 
{ 
    fs.mkdirSync("./app/node_modules/"); 
} 
catch(e) 
{ 
} 

try 
{ 
    if(process.platform.indexOf("win32") !== -1) 
    { 
     fs.symlinkSync("./app/node_modules/","./node_modules/","junction"); 
    } 
    else 
    { 
     fs.symlinkSync("./app/node_modules/","./node_modules","dir"); 
    } 
} 
catch(e){} 

postinstall.js

var fs = require("fs"); 
try 
{ 
    if(process.platform.indexOf("win32") !== -1) 
    { 
     fs.unlinkSync("./node_modules/"); 
    } 
    else 
    { 
     fs.unlinkSync("./node_modules"); 
    } 
} 
catch(e){} 

あなたがscriptsオプションに追加することによって、あなたのpackage.jsonファイルにそれらを使用するだけです:

"scripts": { 
    "preinstall": "node preinstall.js", 
    "postinstall": "node postinstall.js" 
}, 

ので、大きな問題がある:それは何をするのでしょうか?

  1. さて、あなたが欲しいサブフォルダ内node_modulesを作成npm installpreinstall.jsスクリプト火災を呼び出します。次にnode_modulesからまたはshortcutが作成され、npmは実際のnode_modulesになります。

  2. 次に、npmはすべての依存関係をインストールします。

  3. 最後に、すべての依存関係がインストールされると、を削除するpostinstall.jsスクリプトが起動します。

これは便利なものです。必要なものはすべてgistです。

+1

symlinkのアイデアを使って私のデイを保存しました。これは、私のユースケースではうまくいきます(多くのプロジェクトで同じモジュールを使用して、node_modulesディレクトリ全体を魅力的に動作させます)。 –

+0

絶対に華麗! –

+0

これはnode_modulesにはうまくいきますが、gulpfile.jsはpostinstall.jsを実行しないでシンボリックリンクを維持しない限りローカルのgulpがインストールされていないと言うのです このシナリオでgulpfile.jsを実行するにはどうしますか? –

関連する問題