Windows、Linux、Macから実行したときにわずかに異なるコマンドセットを実行するpackage.json
ビルドスクリプトを作成したいと思います。
問題は、すべてのシステムで問題なく実行されるpackage.json
ファイルに配置する方法が見つからないことです。
これが私が欲しい例です:
"scripts" : {
"build.windows" : "echo do windows specific stuff",
"build.linux" : "echo do linux specific stuff",
"build.mac" : "echo do mac specific stuff",
"build" : "??????????????" <- what to put here to execute script designed for OS
on which npm is running
}
node run-scriptコマンドでスクリプトを使用できます。 npm run
はそのショートカットです。
パッケージjson:
"scripts" : {
"build-windows" : "node build-windows.js",
"build-linux" : "node build-linux.js",
"build-mac" : "node build-mac.js",
"build" : "node build.js"
}
コマンドライン:
npm run build-windows
気に入らない場合は、node.js内でコマンドを使用できます。
パッケージjson:
"scripts" : {
"build" : "node build.js"
}
Build.js
var sys = require('sys')
var exec = require('child_process').exec;
function puts(error, stdout, stderr) { sys.puts(stdout) }
var os = require('os');
//control OS
//then run command depengin on the OS
if (os.type() === 'Linux')
exec("node build-linux.js", puts);
else if (os.type() === 'Darwin')
exec("node build-mac.js", puts);
else if (os.type() === 'Windows_NT')
exec("node build-windows.js", puts);
else
throw new Error("Unsupported OS found: " + os.type());
run-script-os
( [〜#〜] npm [〜#〜] | GitHub )と呼ばれるNPMパッケージがあり、追加のファイルを書く必要がありません、これはあなたがやろうとしていることが非常に単純である場合に便利です。たとえば、package.json
では、次のようになります。
"scripts": {
"test": "run-script-os",
"test:darwin:linux": "export NODE_ENV=test && mocha",
"test:win32": "SET NODE_ENV=test&& mocha"
}
次に、Windows、Mac、またはLinuxでnpm test
を実行して、それぞれで同様の(または異なる!)結果を得ることができます。
スクリプトで何をしようとしているのかによって異なりますが、npm cli packagesを使用してクロスプラットフォームコマンドを効果的に追加できる可能性がありますシェルに。
たとえば、ディレクトリを削除したい場合は、WindowsとLinuxで別々の構文を使用できます。
rm -rf _site # bash
rd /s /q _site # cmd
あるいは、npmパッケージ rimraf
を使用すると、クロスプラットフォームで機能します。
npx rimraf _site
上記のDave Pの例をとるために、環境変数を cross-env
このように:
"scripts": {
"test": "npx cross-env NODE_ENV=test mocha",
}
そして、スクリプトをライブでインストールするために npx
を使用したくない場合は、それらをグローバルにインストールできますこのような前もって:
npm i cross-env -g
これが私が書いた投稿です NPMスクリプトをクロスプラットフォームで機能させる これらのオプションのいくつかを探ります