В Ubuntu це досить просто; Я можу запустити програму, використовуючи:
$ NODE_ENV=production node myapp/app.js
Однак це не працює в Windows. Чи є файл конфігурації, де я можу встановити атрибут?
В Ubuntu це досить просто; Я можу запустити програму, використовуючи:
$ NODE_ENV=production node myapp/app.js
Однак це не працює в Windows. Чи є файл конфігурації, де я можу встановити атрибут?
Відповіді:
Поточні версії Windows використовують Powershell як оболонку за замовчуванням, тому використовуйте:
$env:NODE_ENV="production"
Відповідь Пер @ jsalonen нижче. Якщо ви знаходитесь в CMD (який більше не підтримується), використовуйте
set NODE_ENV=production
Це слід виконати в командному рядку, де ви плануєте запустити свою програму Node.js.
Вищенаведений рядок буде встановлювати змінну середовища NODE_ENV для командного рядка, де ви виконуєте команду.
Щоб встановити змінні середовища в усьому світі, щоб вони зберігалися за винятком лише одного командного рядка, ви можете знайти інструмент із системи на панелі керування (або ввівши "середовище" в поле пошуку в меню "Пуск").
set NODE_ENV=production && node app
. Більш зручно налаштувати ваш package.json
відповідно: "scripts": { "start": "set NODE_ENV=production && node app" }
.
echo %NODE_ENV%
щоб перевірити її поточне значення.
cross-env
кращого рішення цієї проблеми, якщо ваша команда працює на змішаних операційних системах. Відповідь на @MoOx мій вибір, як відповідь на це питання.
Щойно я знайшов хороший пакет Node.js, який може багато допомогти визначити змінні середовища, використовуючи унікальний синтаксис, крос-платформу.
https://www.npmjs.com/package/cross-env
Це дозволяє вам написати щось подібне:
cross-env NODE_ENV=production my-command
Що досить зручно! Більше немає специфічних команд для Windows або Unix!
В PowerShell:
$env:NODE_ENV="production"
set NODE_ENV=production
не працював для мене в силі, але це було. Дякую!
$env:NODE_ENV="development"; gulp runMytask
. Зверніть увагу на напівколонку. Файл gulp може використовувати умовну логіку для process.env.NODE_ENV. Якщо ви не встановите її, вона буде невизначена.
cross-env NODE_ENV=production
варіант є дійсно кращим рішенням, якщо запускати npm команди з package.json, які вимагають встановити env. Занадто просто залишати програму env у програмі dev / prod після використання опції $ env: NODE_ENV
Було б ідеально, якби ви могли встановити параметри на тій же лінії, що і ваш дзвінок, щоб запустити Node.js в Windows. Погляньте на наступне уважно та виконайте його так, як зазначено:
У вас є два варіанти:
У командному рядку:
set NODE_ENV=production&&npm start
або
set NODE_ENV=production&&node index.js
Трюк для роботи в ОС Windows полягає в тому, що вам потрібно видалити пробіл до та після &&. Налаштуйте файл package.json із start_windows (див. Нижче) нижче. Потім запустіть "npm run start_windows" у командному рядку.
//package.json
"scripts": {
"start": "node index.js"
"start_windows": "set NODE_ENV=production&&node index.js"
}
Можна використовувати
npm run env NODE_ENV=production
Це, мабуть, найкращий спосіб зробити це, оскільки він сумісний і в Windows, і в Unix.
З документації npm run-script :
Сценарій env - це спеціальна вбудована команда, за допомогою якої можна перераховувати змінні середовища, які будуть доступні сценарію під час виконання. Якщо у вашому пакеті визначена команда "env", вона матиме перевагу над вбудованою.
npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'
--
node -e 'console.log(process.env.NODE_ENV)'
npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js
і ... нічого не сталося. Я не впевнений, що цей метод працює на Windows.
Якщо ви використовуєте Visual Studio з NTVS, ви можете встановити змінні середовища на сторінці властивостей проекту:
Як ви бачите, спадні меню "Конфігурація" та "Платформа" вимкнено (я не надто розглядав, чому це так), але якщо ви редагуєте .njsproj
файл так:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>true</DebugSymbols>
<Environment>NODE_ENV=development</Environment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugSymbols>true</DebugSymbols>
<Environment>NODE_ENV=production</Environment>
</PropertyGroup>
Спадне меню "Налагодження / випуск" потім контролюватиме встановлення змінної перед запуском Node.js.
Я написав модуль win-node-env, за допомогою якого ви можете запустити свою команду так само, як і в * nix.
NODE_ENV=production node myapp/app.js
Він працює, створюючи NODE_ENV.cmd
команду a, яка встановлює NODE_ENV
змінну середовища і породжує дочірній процес з рештою команди та її аргументів.
Просто встановіть його (у всьому світі) і запустіть свої команди сценаріїв npm, це повинно автоматично змусити їх працювати.
npm install -g win-node-env
Мій досвід використання Node.js у Windows 7 64-розрядному в Visual Studio 2013 - це те, що вам потрібно використовувати
setx NODE_ENV development
з вікна cmd. І вам доведеться перезапустити Visual Studio, щоб розпізнати нове значення.
Набір синтаксису триває лише протягом тривалості вікна cmd, в якому він встановлений.
Простий тест у Node.js:
console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);
Він повертає 'undefined' при використанні набору, і повертає 'development', якщо використовувати setx та перезапускати Visual Studio.
cmd
- не повноваження? Фу, давай на вікна, збери разом.
Ось метод без командного рядка:
У Windows 7 або 10 введіть середовище у вікно пошуку меню «Пуск» та виберіть Редагувати змінні системного середовища.
Крім того, перейдіть до Панелі управління \ Система та безпека \ Система та натисніть Розширені налаштування системи
Це має відкрити діалогове вікно "Властивості системи", вибравши вкладку "Додаткові". Унизу ви побачите кнопку Змінні середовища ... Натисніть це.
Відкриється діалогове вікно змінних довкілля.
Унизу, під системними змінними, виберіть команду Створити ... Це відкриє діалогове вікно Нова системна змінна.
Введіть ім'я та значення змінної та натисніть кнопку ОК.
Вам потрібно буде закрити всі підказки cmd і перезапустити сервер, щоб нова змінна була доступна для Process.env. Якщо вона все ще не з’являється, перезавантажте машину.
Просто для уточнення та для всіх, хто може витягнути волосся ...
Якщо ви використовуєте git bash в Windows , set node_env=production&& node whatever.js
схоже , це не працює . Замість цього використовуйте нативну cmd. Потім, використовуючи set node_env=production&& node whatever.js
роботи, як очікувалося.
Мій випадок використання:
Я розвиваюся в Windows, тому що мій робочий процес відбувається набагато швидше, але мені потрібно було переконатися, що середнє програмне забезпечення, яке стосується розробки мого додатка, не спрацьовує у виробничих умовах.
Щоб запустити свою програму в PowerShell (оскільки &&
це заборонено):
($env:NODE_ENV="production") -and (node myapp/app.js)
Зауважте, що подання тексту того, що робить сервер, придушене, і я не впевнений, чи можна це виправити. (Розгортається на відповідь @ jsalonen.)
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Для декількох змінних середовищ .env
файл зручніше:
# .env.example, committed to repo
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
# .env, private, .gitignore it
DB_HOST=real-hostname.example.com
DB_USER=real-user-name
DB_PASS=REAL_PASSWORD
Його легко використовувати dotenv-safe
:
npm install --save dotenv-safe
.index.js
) та безпосередньо використовуйте його за допомогою process.env
команди :require('dotenv').load()
console.log(process.env.DB_HOST)
Не забудьте проігнорувати .env
файл у своєму VCS .
Тоді ваша програма швидко виходить з ладу, якщо змінна "визначена" в .env.example
не встановлена як змінна середовище, так і в .env
.
У випадку, якщо ви використовуєте термінал GITBASH
"set NODE_ENV=production"
не буде працювати, ви можете ввести "експортувати"NODE_ENV=production"
це не встановить змінну, але це корисно у багатьох випадках. Я не рекомендую використовувати це для виробництва, але це буде добре, якщо ви граєте з npm.
npm install --production
Я використовував сценарій npm для запуску завдань із глоткою без "&&"
NODE_ENV = тестові корпуси npm запускають насіння-db
Перезапустіть код VS, якщо NODE_ENV або будь-яка інша змінна середовище не дає правильного значення. Це повинно працювати після перезавантаження.