web-dev-qa-db-ja.com

npm package.json OS固有のスクリプト

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
}
21
gawi

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());
14
hurricane

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を実行して、それぞれで同様の(または異なる!)結果を得ることができます。

15
Dave P

スクリプトで何をしようとしているのかによって異なりますが、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スクリプトをクロスプラットフォームで機能させる これらのオプションのいくつかを探ります

1
KyleMit