2017-09-21 6 views
0

にPATHのディレクトリを追加できる方法はありますか。私はこのディレクトリをマシンに追加したくないのですPATH、スクリプトを実行するときにnpmが使うのはちょうど1つです。 私はNPMは私の特定のケースに詳細を与えるために(hereを参照)任意の既存のマシンPATHに加えてnpmのカスタムPATHを設定します

node_modules/.binを追加することを知っています。私はネストされたディレクトリを持つプロジェクトを持っていて、それぞれ独自のpackage.jsonを持っています。親バイナリに依存するサブディレクトリでスクリプトを実行すると、バイナリはローカルnode_modules/.binではなく親のnode_modules/.binにあるため、見つからないでしょう。 スクリプト内でバイナリへのパスを指定することはできましたが、これは面倒でスクリプトの読みやすさが低下します。

したがって、すべてのスクリプトを実行する前にn30にPATHをエクスポートするように指示する方法はありますか? node_modules/.bin

+0

この追加のディレクトリを** PATH **にハードコードする予定ですか、それとも 'node_modules/.bin'フォルダの親ディレクトリを自動的に通過させたいですか? – gregnr

+0

@gregnrいずれにしても私のために働く。私は、自動的に親ディレクトリを横断するのが好ましい方法だと思うが、ディレクトリを** PATH **にハードコーディングすることで解決するだろう(ただし 'npm'のみで、マシンシェルではない、すなわち' package.json'サブディレクトリを使うそれが可能であれば 'npmrc'を設定してください) – Felipe

+0

[このリンク](https://docs.npmjs.com/cli/run-script)のように' node'スクリプトを参照しています質問自体に)。それらは 'npm run ...'で実行されるスクリプトです。第5段落では、npmが任意のスクリプトを実行する前に** PATH **に 'node_modules/.bin'を追加すると述べています。その特定の** PATH **に他のディレクトリを追加したいのですが、各スクリプトを実行する前に変更されています。または、npmがそれらを** PATH **に自動的に追加する親ディレクトリを横断するようにします。このすべてはマシンシェルPATHを変更することなしに – Felipe

答えて

1

あなたが説明していることを達成するための簡単な方法は考えられません。

あなたが設定/右のようなスクリプトの前に環境変数を変更することができます。

{ 
    "scripts": { 
    "parent-script": "PATH=$PATH:/path/to/parent/node_modules/.bin parent-script" 
    } 
} 

しかし、あなたが述べたように、これはすべてのスクリプトでこれを行うには面倒です。

{ 
    "scripts": { 
    "parent-script": "/path/to/parent/node_modules/.bin/parent-script" 
    } 
} 

複雑に、しかしおそらくより保守的なアプローチを実行し、自分自身に引数として渡されたスクリプトの親ディレクトリを横断しますsearch-scriptノードモジュールを構築することができます:あなたが説明するようにもあなたにもちょうど行う可能性がありますそれ:

{ 
    "dependencies": { 
    "search-script": "^0.0.1" 
    }, 
    "scripts": { 
    "parent-script": "search-script parent-script" 
    } 
} 

残念ながら、NPMはこのような柔軟性を提供しません。

+0

実際には、 PATH **は正しいです。私はそれをテストして、特にバイナリに依存する外部スクリプトを呼び出すときに動作します。他の人が見ることができるように自由に変更してください。 – Felipe

+0

元に戻しました。もともと、環境変数が設定される前に、 'npm run ...'が既に呼び出されていたと想像していたので、うまくいきませんでした。それは本当ではないように見えます。 – gregnr

0

私が見ることができるのは、npmという名前のシェルスクリプトを作成し、それをPATHのフォルダに置き、PATHからnpmを削除し、シェルスクリプトで親を設定することだけです。 PATHにバイナリディレクトリを作成し、残りのargsを渡してnpmバイナリを呼び出します。それは本当に価値がないし、他の問題を引き起こす可能性があります。

ネストされたフォルダ内のスクリプトは、すべて独自のpackage.jsonに依存しています。これらのバイナリは、独自に展開する場合は特に価値があります。

これはノード/ npmの問題です。これは、同じパッケージを何度もダウンロードする必要がありますが、パッケージが使用するバージョンを知ることは簡単です。

+0

これは私がまったく求めているものではありません。私の質問は 'npm'と' npm install'で作成されたバイナリを使ってpackage.jsonからスクリプトを実行することに特有のものです。あなたの答えはまったく違うものになります – Felipe

+0

あなたは正しいです、私はあなたが求めていたことを誤解しました。私はそれが可能かどうかをチェックしています。 –

+0

これらのパッケージをグローバルにインストールする方法はありますか? –

関連する問題