Как установить оболочку для npm run-scripts в windows

Я запускаю npm для Windows и хотел бы использовать & стиль параллельных операций в run-скриптах но параллельная работа в cmd немного грязная в моем файле package.json я хотел бы write-

scripts: { "go": "cmd1 & cmd2"} 

но npm выполняет скрипт под cmd.exe, который не знает о ;. Я мог бы изменить это на scripts: { "go": "bats/bat1.bat") где bat1.bat - это командный файл cmd, который использует команды вызова или запуска в стиле Windows для параллельного выполнения команд. который работает, но дает мне скрипт, который работает только на окнах

было бы намного проще, если бы я мог заставить npm запускать скрипт под клоном bash или cygwin Я пытался config: { "shell": "bash"} но все равно запускается cmd.exe

Есть ли способ сказать Npm для запуска сценариев с использованием определенной оболочки (не cmd.exe)?

Ответ 1

С нпм 5.1

npm config set script-shell "C:\\Program Files (x86)\\git\\bin\\bash.exe"  

или (64-битная установка)

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"

Обратите внимание, что вам нужно установить git для Windows.

Вы можете вернуть его, запустив:

npm config delete script-shell

Ответ 2

Вот один из способов сделать это:

  • Создайте script, например my_script.sh, в каталоге проекта bin.
  • В файле package.json добавьте строку для запуска script с помощью bash. Например:

    "scripts": {
      "boogie": "bash bin/my_script.sh"
    }
    

Теперь вы можете запустить bash script из npm с помощью:

    npm run-script boogie

Не очень элегантный, но он работает.

Если вы работаете как в Windows, так и в Linux/Unix, по крайней мере этот подход довольно переносим для обеих сред.

Ответ 3

В идеале переопределение параметра конфигурации оболочки npm должно работать, но npm (по крайней мере, версия 1.4.14) кажется в Windows игнорировать параметр и вместо этого использовать cmd.exe.

Используйте следующую команду в оболочке bash или Git bash, чтобы узнать настройку оболочки:

$ npm config ls -l | grep shell

По умолчанию выход будет:

shell = "C:\\WINDOWS\\system32\\cmd.exe"

Однако, чтобы переопределить параметр оболочки по умолчанию, вы можете добавить (или отредактировать) файл npmrc в каталог \Users\yourusername\AppData\Roaming\npm\etc. Просто добавьте следующую строку:

shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"

Путь, который вы используете, может быть любым допустимым путем к bash.exe. Теперь, если вы запустите вышеупомянутую команду "npm config ls -l | grep shell", вы увидите следующий вывод, указывающий, что параметр оболочки был переопределен:

shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"
; shell = "C:\\WINDOWS\\system32\\cmd.exe" (overridden)

Однажды, возможно, новая версия npm будет обращать внимание на переопределенный параметр оболочки.

Ответ 4

Используйте специально созданную node_module для этой цели. Я предлагаю использовать npm-run-all, но другие существует, например как parallelshell.

Ниже приведен пример Parallelshell для замены вашего вопроса.

"scripts": {
    "parallelexample1": "parallelshell \"echo 1\" \"echo 2\" \"echo 3\""
},

следующая команда:

npm run parallelexample1

работает как на windows, так и на unix (Linux/MacOS).

Интересно, что npm-run-all не поддерживает команды оболочки; поэтому мы должны поместить все команды оболочки в отдельные сценарии, как показано ниже.

"scripts": {
   "parallelexample2": "npm-run-all echo*",
    "echo1": "echo 1",
    "echo2": "echo 2",
    "echo3": "echo 3"
},

Следующая команда:

npm run parallelexample2

работает как на windows, так и на unix (Linux/MacOS).

Ответ 5

просто используя CMD способ запуска .bat !

.json
"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject",
    "app": "cd build & browser-sync start --server --files 'index.html'",
    "bat": "start start-browser.bat",
    "starts": "start http://localhost:7777/datas/ && start http://localhost:7777/Info/"
},
.bat
start http://localhost:7777/datas/ && start http://localhost:7777/Info/

Ответ 6

В моем случае мне просто нужно было запустить npm start изнутри Bash. Я запускаю cmd, затем открываю bash, запуская "c:\Program Files\Git\bin\bash.exe". Под оболочкой bash я смог успешно вызвать npm build и npm start.

Возможно, у вас уже есть bash, если вы используете Git. Если нет, вы можете установить его.

Надеюсь, что это может сэкономить кому-то время.

Ответ 7

Только те, у кого, возможно, была такая же проблема, как и я: я мог запустить npm start на windows cmd, но не смог запустить его на (git) bash. Я получил ошибку:

узел не распознается как внутренняя или внешняя команда...

Я искал в Интернете в течение двух дней, в то время как в основном видел идеи для добавления пути nodejs к пути системных переменных среды. В конце концов, моя проблема была исправлена строкой, написанной Qwerty выше... Спасибо, Qwerty :)