Как установить оболочку для 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
Вот один из способов сделать это:
Теперь вы можете запустить 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 :)