95

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 では機能しません。

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

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

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

4

2 に答える 2

108

npmcd dir && command -argsWindows でも動作する のみ実行できます。

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

于 2016-03-04T17:19:10.277 に答える
7

上記のように:

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

var spawn = require('child_process').spawn

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

    {cwd: pwd + 'somepath'}

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

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

于 2016-02-17T20:46:17.213 に答える