2016-12-29 6 views
2

Я нахожусь в Windows 10, но я использую git bash. При работе с git bash следующего:Почему `DEBUG = foo node index.js` не работает в разделе` scripts` `package.json`

DEBUG=foo node index.js 

он отлично работает и устанавливает переменные окружения DEBUG. Но если я положил его в scripts части package.json:

"scripts": { 
    "start": "DEBUG=foo node index.js" 
    }, 

и выполните следующую git bash я получаю следующее сообщение об ошибке:

$ npm start 

> [email protected] start C:\Users\maksym.koretskyi\Desktop\nodejs 
> DEBUG=foo node index.js 

'DEBUG' is not recognized as an internal or external command, 
operable program or batch file. 

Почему поведение?

+2

Ваша ошибка возникает из-за команды, выполняемой в среде 'Windows' (обратите внимание на ключевое слово' batch'), а не на оболочку 'bash'. – Inian

+0

спасибо, вот что я подумал. Вы знаете, почему 'DEBUG = foo node index.js' выполняется под Windows env, даже если я запускаю npm start' из' git bash'? –

+0

Повторите попытку повторного подтверждения, если 'node' установлен peroperly, может быть проверка' $ PATH' в 'Git bash', чтобы увидеть, имеет ли он путь, где установлен узел – Inian

ответ

2

Кажется, что вы используете его в Windows.

Если предположить, что у вас есть Bash работать, как вы сказали, я бы сценарий:

#!/bin/bash 
DEBUG=foo node index.js 

под названием, например, run-debug и использовать:

"scripts": { 
    "start": "bash run-debug" 
}, 

в package.json, чтобы убедиться, что команда DEBUG=foo node index.js интерпретируется Bash и не command.com или любой другой оболочки в Windows, называется. См. Issue #6543: npm scripts shell select.

В тех случаях, когда Вы хотите, чтобы работать даже на системы без Bash, для максимальной совместимости кросса-платформенной, это даже лучше использовать сценарий Node вместо сценария оболочки:

"scripts": { 
    "start": "node run-debug.js" 
}, 

В этом случае run-debug.js может содержать что-то вроде:

let env = Object.create(process.env); 
env.DEBUG = 'foo'; 
spawn('node', ['app.js'], {env}); 

Смотрите также:

+0

спасибо, это может быть решением, но я хочу понять, почему' npm' запускает команды под Windows, а не 'git bash' –

1

Да, действительно, я нашел следующее thread и заявляет, что:

The shell config variable is only used by the npm explore command, which forks a subshell. It's not meant to be used to allow you to use, say, bash on Windows, or switch between Powershell and cmd.exe. Scripts are always run by the shebang line on Unix, and cmd.exe on Windows.

Таким образом, кажется, что это дизайн и нет никакого способа, чтобы изменить его.

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