web-dev-qa-db-ja.com

npmスクリプトの作業ディレクトリを変更する

Q: npmがスクリプトを実行するコンテキストを変更することは可能ですか?

私がしたいことは次のとおりです:

"scripts": {
   "test": "gulp mocha",
   "pre-install": "./deps/2.7/cpython/configure --prefix=$(pwd)/build --exec-prefix=$(pwd)/build && make -C deps/2.7/cpython && make -C deps/2.7/cpython install",
   "install": "node-gyp rebuild"
},

明らかにcd deps/2.7/cpython/ && ./configureはUNIXライクなシステムでは機能しますが、Windowsでは機能しません。

理由:問題の根本は、pythonリポジトリのconfigureコマンドが、呼び出されたディレクトリにファイルを出力することです。ただし、これらのファイルは、makeおよびmake installに関連するビルドです。これらは、リポジトリのディレクトリでファイルを検索します。

この場合、Pythonのビルドプロセスは理解できるほど複雑なので、Makefileを変更することはできません。

代替案:代替案は、おそらくいくつかのinstall.jsを記述し、ノードのOSに依存しないAPIといくつかのchild_process.exec()を使用することです。ただし、npmを残さないことは本当に素晴らしいことです。

68

npmは、cd dir && command -argsのみを許可します。これはWindowsでも実行されます。

nodeのスポーン機能を使用するための変更がPR https://github.com/npm/npm/pull/10958 で行われましたが、上記の解決策により拒否されました。

67

上記のように:

npmはおそらく使用しています

var spawn = require('child_process').spawn

次のようなオプションを設定できます。

    {cwd: pwd + 'somepath'}

しかし、それを公開していません。

かなり大きなinstall.jsで解決しましたが、これは大まかにそれを行い、上記のようにpackage.jsonから呼び出されます。ただし、child_processのAPIは、デバッグが難しいエラーを大量にスローするため、それほど簡単に処理できません。しばらく時間がかかりましたが、今は幸せです。

5
Paul Sweatte