NPMのカスタムパスを設定します -- node.js フィールド と npm フィールド と path フィールド と npm-scripts フィールド 関連 問題

set custom PATH for npm












0
vote

問題

日本語

NPMのパスにディレクトリを追加できるような方法はあります。このディレクトリをマシンパスに追加したくない、スクリプトを実行するときに1つのNPMが使用するだけです。 NPMは、既存のマシンパスに加えて node_modules/.bin を追加していることを知っています(ここ)

私の特定のケースに詳細を詳しく説明する。私はネストされたディレクトリを持つプロジェクトを持ち、それぞれ独自の package.json を持っています。親バイナリに依存するサブディレクトリでスクリプトを実行すると、バイナリはローカル<コード> node_modules/.bin ではなく、親<コード> node_modules/.bin ではありません。 スクリプト内のバイナリへのパスを指定できますが、これは面倒でスクリプトが読みやすくなります。

だから、パスをexport パスをexport を輸出するように告げる方法はありますか?ローカル node_modules/.bin

を追加するには、すでにこのようなことをしています。
英語

Is there a way that I can add a directory to the PATH of npm. I DON'T want to add this directory to the machine PATH, just the one npm uses when running scripts. I know that npm adds node_modules/.bin in addition to any pre-existing machine PATH (see here)

To give more detail on my specific case. I have a project with nested directories, each with its own package.json. When running a script on a sub-directory which depends on a parent binary, the binary won't be found because it's not on the local node_modules/.bin but inside a parent node_modules/.bin. I could specify the path to the binary inside the script but this is cumbersome and makes the scripts less readable.

So, is there a way to tell npm to export PATH before running every script? It's already doing something like this to add the local node_modules/.bin

</div
           
     
     

回答リスト

1
 
vote
vote
ベストアンサー
 

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

スクリプトの直前に環境変数を設定/変更できます。

<事前> <コード> { "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はこのようなものには多くの柔軟性を提供しません。

 

I can't think of any simple way to accomplish what you are describing.

You can set/modify environment variables right before a script like:

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

But as you mentioned this is cumbersome to do this on every script. Also you might as well just do as you described:

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

A complicated, but possibly more maintainable approach could be to build yourself a search-script Node module that will traverse parent directories for a script passed as an argument, then run it:

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

Unfortunately NPM does not provide a lot of flexibility for things like this.

</div
 
 
0
 
vote

NPMと呼ばれるシェルスクリプトを作成することは、パス内のフォルダにそれをフォルダに配置し、パスからNPMを削除し、シェルスクリプトをパスに親バイナリDirを設定してください。 argsの残りそれは本当に価値がなく、他の問題を引き起こすかもしれません。

私はただ私はあなたのスクリプトを入れ子になったフォルダ内のあなたのスクリプトが彼ら自身のpackage.jsonに依存しています。これは、いくつかの方法で、特にそれらを独立して展開したい場合は特別に。

これは、それが同じパッケージを複数回ダウンロードするようにあなたがそのようなものとしてノード/ NPMの発行自体ですが、少なくともあなたのパッケージが使うのかを知ることは簡単です。

 

Only thing I can see is creating a shell script called npm, place it in a folder in your PATH and remove npm from your PATH and have your shell script set the parent binary dir in your PATH and call the npm binary passing the rest of args. It's not really worth it and might cause other issues.

I would just add all those binaries your scripts in nested folders depend on in their own package.json, which in some ways is worth it, specially if you want to deploy them independently.

This is a node/npm issue itself as it kind of forces you to download the same package multiple times, but at least it's easy to know which version your package uses.

</div
 
 
         
         

関連する質問

0  各NPMスクリプトに複数の分割端末を開く方法は?  ( How to open multiple split terminals for each npm script ) 
私は5つのNPMスクリプトと同じように、それぞれが時計モードで走られ、コンソールに何かを書くので、それぞれが自分の端末を必要としています。 これはスクリプトです: <事前> <コード> "server-build-dev": "cd ts/backend &&...

49  NPMスクリプトからESLINT --FIXを実行する方法  ( How to run eslint fix from npm script ) 
私のpackage.jsonでlint-fixを追加しようとしています。 私の基本的なLINTは<コード> "lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs" です。 "l...

26  command.jsonのnpmスクリプトに渡すコマンドラインargsを渡します  ( Pass command line args to npm scripts in package json ) 
私のpackage.jsonの下記のスクリプトを持っています: <事前> <コード> "scripts": { "vumper": "node node_modules/vumper/index.js", "format": "prettier...

1  環境変数を設定するためのクロスプラットフォームの方法* NPMスクリプトのスペース*  ( Cross platform way to set environment variables with spaces in npm scripts ) 
サーバーレスNodeJSアプリケーションを開発しており、オフラインモードでテストする必要があります。 npm スクリプトは、次のようになっています。 <事前> <コード> "scripts": { "serve": "cross-env AUTH...

18  NPM:ENOENT:そのようなファイルまたはディレクトリはありません。名前の変更  ( Npm enoent no such file or directory rename ) 
私はプロジェクトでGULPを使用していましたから、すべてのDEV依存関係をWebPackに切り替えることを決定しましたが、NPMを使用してインストールしようとするたびにこのエラーが発生します。 <事前> <コード> npm WARN optional SKIP...

0  最初の戻りエラーが発生した場合、NPMスクリプトを順番に実行します  ( Interrupt npm scripts running sequentially if first return error ) 
次のNPMスクリプトを使用しているIM <コード> document.getElementById("IdTable").style.border=1; $("#IdTable").css.apply("border", "1"); 5 最初の1つ( "c...

1  Visual Studio Code - NPM Script Explorerからサブディレクトリを除外する  ( Visual studio code exclude subdirectories from npm script explorer ) 
マイワークスペースディレクトリには、スクリプトがいくつか、Script Explorerから除外する package.json ファイルを含む package.json が含まれています。 $$0 、<コード> $$1 を呼び出します。 しかし $$2 に置...

0  process.envのNPMパッケージ  ( Npm packages in process env ) 
これらのパッケージはすべて process.env にどのようにインストールされていますか、そしてNPMスクリプトで<コード> NODE_ENV が表示されないのはなぜですか? <コード> "start": "NODE_ENV=dev npm run bui...

0  DevDependeciesにリストされているパッケージを再インストールした後にNPMスクリプトが機能しない  ( Npm scripts not working after reinstalling packages listed in devdependecies ) 
NPMスクリプトを使用してフロントエンドDEVのビルドシステムを開発しており、 package.json の scripts ののセクションにはいくつかのタスクが定義されています。これらには、CSS、コードの輝き、ドキュメントの生成、追跡JavaScript...

9  NPM Run Buildは常に生産を構築し、決して開発をしません  ( Npm run build always builds production and never development ) 
継承されたプロジェクトでは、 Production 以外のバージョンを構築するためのbuildコマンドを取得しようとしています。 package.json の script のエイリアスを変更しようとしました。<コード> --dev および --conf...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有