23

yarn installの代わりに強制的に使用したいnpm install。でエラーを発生させたいnpm install。で何をすればいいpackage.jsonですか?

4

8 に答える 8

30

更新: アレクサンダーの答えはより良い解決策であり、ここで説明するのと同じ手法を使用しています。私は後世のために答えを残しておきます。私の答えの元のポイントは、すべてのプラットフォームで動作する小さなノード スクリプトを実行できることを示すことでした。

プレインストール スクリプトでは、すべてのプラットフォームで動作するミニ ノード スクリプトを実行できますが、pgrepWindows 10 が広く採用されるまで、(およびその他の一般的な *nix コマンドや演算子) などは Windows では動作しません。

Node v4.7.0 (npm v2.15.11) と Node v7.2.1 (npm v3.10.10) で以下のスクリプトをテストしました。その間のすべてで機能すると思います。現在実行中のプロセスの環境変数をチェックすることで機能します。これnpm_execpathは、現在実行中の「npm」スクリプトへのパスです。糸の場合は、 を指す必要があり/path/to/yarn/on/your/machine/yarn.jsます。

"scripts": {
    "preinstall": "node -e \"if(process.env.npm_execpath.indexOf('yarn') === -1) throw new Error('You must use Yarn to install, not NPM')\""
}

npm スクリプトの詳細については、https ://docs.npmjs.com/misc/scripts を参照してください。

環境変数に関してnpm_execpathは、文書化されていませんが、変更されるとは思えません。の複数のメジャー リリースで出回っていますが、 「これにはもっと適切な名前があります」というテストにnpm実際には合格していません。

于 2016-12-13T02:15:48.683 に答える