2016-05-29 16 views
1

npmバージョンを検出するshスクリプトをnpm scriptsで実行します。 私は次のスクリプトを持っており、それはクールな作品:WindowsとUnixでnpm shスクリプトを実行する方法

if [ $(npm -v | cut -c 1 | awk '{print $1\"<3\"}' | bc -l) != 0 ]; then echo '[ERROR] You need npm version @>=3\n' && false; fi 

しかし、このスクリプトは私がWindows上でスクリプトを実行すると、私はエラーを得た* NIX上でのみ動作します:

$(npm was unexpected at this time.

私がしたいです私はWindows上でスクリプトを実行している場合は、スクリプトを実行しないでください、私はこれを試したが、再び* NIXで動作します:

if [ 'uname -s' != CYGWIN* ]; then if [ $(npm -v | cut -c 1 | awk '{print $1\"<3\"}' | bc -l) != 0 ]; then echo '[ERROR] You need npm version @>=3\n' && false; fi; fi 

私が得た:

'uname was unexpected at this time.

私は窓にunameの相当systeminfo

あるしかし、私はsysteminfoを使用している場合、私は* NIX上で未定義を得たことを確認しました。

このスクリプトをWindowsで動作させるにはどうすればいいですか?& & * NIX?

+0

バッシュとバッチは全く異なる言語です。そのスクリプトをWindowsで実行するには、Cygwinをインストールするか、Windows 10を実行するか、スクリプトを完全に書き換える必要があります。 – SomethingDark

答えて

2

は、Windowsではないプラットフォーム上で、あなたのbashスクリプトを実行する場合は、ノード自体とプラットフォームを確認することができ(そのノードがインストールされていると仮定して)あなたのを書くことができos.platform()

scripts: {  
    checkNpmVersion: "node -e \"process.exit(require('os').platform() === 'win32')\" && ./check-npm.sh" 
} 

またはより良いを使用してノード内の小さなスクリプト、それはすべてのプラットフォーム上で動作するように(再び、そのノードがインストールされていると仮定)

// check-npm.js 
const exec = require('child_process').exec 

exec('npm -v', function (err, stdout, stderr) { 
    if (err) throw err 
    if (stdout.match(/^3/)) throw "npm>3 required" 
}) 

やスクリプトフィールドに

scripts: {  
    checkNpmVersion: "node check-npm.js" 
} 

ノードv4.4.5およびnpm 2.15.5でWin7でテスト済み

+1

うわー、ありがとう、私はノードを知っているときに私はbashとバッチを自分自身を複雑にしていた。 – Rog

関連する問題