2016-05-29 6 views
1

Я хочу запустить сценарий sh, который обнаруживает мою версию npm через npm scripts. У меня есть следующий сценарий, и он работает здорово:Как запустить сценарий npm sh в Windows и Unix

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

Но этот скрипт работает только на * 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

Bash и партия - совершенно разные языки. Чтобы запустить этот сценарий в Windows, вам нужно либо установить Cygwin, либо запустить Windows 10, либо полностью переписать сценарий. – SomethingDark

ответ

2

Если вы хотите, чтобы выполнить свой Баш скрипт на платформе, не Windows, вы можете проверить платформу сам узел (предполагая, что узел установлен) с помощью 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" 
} 

Протестировано на Win7 с узлом v4.4.5 и npm 2.15.5

+1

Ничего себе, спасибо, я усложнил себе bash и пакет, когда знаю узел. – Rog

Смежные вопросы