Як встановити NODE_ENV на виробництво / розробку в OS X


Відповіді:


663

Перш ніж запустити додаток, це можна зробити в консолі,

export NODE_ENV=production

Або якщо ви знаходитесь у Windows, ви можете спробувати це:

SET NODE_ENV=production

або ви можете запустити додаток так:

NODE_ENV=production node app.js

Ви також можете встановити його у вашому js-файлі:

process.env.NODE_ENV = 'production';

Але я не пропоную це робити у вашому файлі виконання, оскільки відкрити VIM на своєму сервері та змінити його на виробництво непросто. Ви можете створити файл config.json у своєму каталозі, і кожен раз, коли ваша програма запускається, вона читає з неї та встановлює конфігурацію.


12
Це погана порада. Це буде складне налаштування process.env.NODE_ENVнадійно від самого додатка. Найкраще встановити змінну вашого середовища належним чином, як Даніель посилається нижче.
— МК Сафі

15
Я прихильник NODE_ENVявного налаштування кожного разу, коли ви запускаєте додаток, як у другому прикладі ( NODE_ENV=production node app.js). Таким чином, ви потенційно можете вберегти себе від майбутнього підтягування волосся у випадку, якщо ви забудете встановити місцеве місце NODE_ENVназад development.
— Джон

Зовсім не така блискуча. Кожен раз, коли ви запускаєте додаток, ви повинні додавати цей env var. Це смокче. Розміщене краще рішення нижче.
— Лукас Лейсіс

2
Зверніться до npmjs.com/package/cross-env для простого кросплатформенного рішення. cross-env NODE_ENV=productionпрацює на windows та linux / mac.
— AntonB

1
@Gleb NODE_ENV=production forever app.jsповинен працювати.
— Фарид Нурі Нешат

102

в package.json:

{
  ...
  "scripts": {
    "start": "NODE_ENV=production node ./app"
  }
  ...
}

потім запустіть у терміналі:

npm start

1
не починайте ставити купу сценаріїв у package.json, це погана практика, оскільки ви вводите невідповідності, і це вбиває незмінність у ваших проектах. Я знаю, що багато людей створюють сценарії для запуску бурчання або глотання, але не роблять цього
— PositiveGuy

38
@WeDoTDD про що ти говориш? Ці сценарії покликані використовуватись аналогічно тому, як працює файл makefile. Використовувати його як цей приклад або як ви вже згадували для запуску глотків - цілком розумний випадок використання. Для простих завдань я зараз навіть не використовую gulp і роблю все це в сценарії, набагато швидше налагодити роботу, і я дозволяю webpack виконувати ту роботу, яку раніше робив gulp.
— Марко Грешак

15
@WTF - Що ти означає, що використовувати сценарії в package.json "погана практика"? Ось і суть сценаріїв: розділ, щоб поставити сценарії! Він ідеально діє і виключає потребу в глотці або бурчання. Все зроблено за допомогою команд та веб-пакетів.
— ТетраДев

6
@WTF Використання скриптів фактично значно покращує узгодженість. Ви можете встановити стандартний набір команд, які будуть використовуватись у кількох проектах, які можуть не використовувати одні й ті ж базові сценарії збірки, бібліотеки тощо. Ви можете принаймні спробувати підкріпити свою точку з фактами та прикладами.
— Льюїс Діамант

4
Введення NODE_ENV=productionв package.json не має особливого сенсу. Запуск npm startв розвитку буде запустити його у виробництво. Ви можете так само написати свій код, як ніби це завжди виробництво, оскільки ви завжди керуєте ним таким чином. Я вважаю, що це змушує інших модулів (наприклад, Express) працювати в режимі виробництва. Навіщо взагалі використовувати змінні середовища, якщо вони ніколи не змінюються?
— Nateowami

66

Тут ніхто ще не згадував .env? Створіть .envфайл у корені програми, а потім require('dotenv').config()прочитайте значення. Легко змінюється, легко читається, кросова платформа.

https://www.npmjs.com/package/dotenv


1
Дивно, про це ніхто не згадує, найкраще рішення, на мою думку. Помістіть ім’я середовища в той самий файл з рештою змінних.
— Асінус Рекс

2
Встановлення NODE_ENV у .env-файл не працюватиме. Дивіться це: github.com/motdotla/dotenv/isissue/328
— Михайло Зеленський

Для мене налаштування "mode": "production"у .envфайлі спрацювало.
— DarkLite1

46

export NODE_ENV=production це погане рішення, воно зникає після перезавантаження.

якщо ви більше не хочете турбуватися про цю змінну - додайте її до цього файлу:

/etc/environment

не використовуйте синтаксис експорту, просто напишіть (у новому рядку, якщо якийсь вміст уже є):

NODE_ENV=production

він працює після перезавантаження. Вам більше не доведеться повторно вводити експорт NODE_ENV = команда виробництва і просто використовувати вузол із усім, що вам завгодно - назавжди, pm2 ...

Для heroku:

heroku config:set NODE_ENV="production"

що насправді за замовчуванням.


2
Кошмар технічного обслуговування. А що з вікном, де у вас немає дозволів на / тощо?
— Томас МакКейб

1
Я особисто використовую NODE_ENV=production gulp bundle-production-appдля створення готового сценарію для виробництва, на сервері NODE_ENV знаходиться в середовищі сервера, а в машині розробників його немає. У деяких машинах це кошмар, якщо він не встановлений, і ви очікуєте, що він буде встановлений завжди . У деяких ви очікуєте, що цього не буде, тому не додаєте. У будь-якому разі, роблячи користувальницькі інтерфейси, я даю зрозуміти, чи перебуває він у режимі розробки, тому у вас ніколи не виникає питання, увімкнено чи вимкнено. Якщо NODE_ENV є! == виробництво, то за вашим обличчям ви перебуваєте в іншому режимі, тож зовсім не кошмар. Все ясно, все добре.
— Лукас Ліесіс

+1 за розмову про те, як зробити це збереженим. Цікаво, скільки людей встановили це лише на поточній сесії, думаючи, що це збережеться. А як щодо перезавантаження? Якщо ви хочете встановити його одразу, ви повинні поставити його /etc/environment та запустити export NODE_ENV=production?
— Nateowami

24

Щоб не турбуватися, чи встановлюєте ви сценарії в Windows, Mac або Linux, встановіть пакет cross-env . Тоді ви можете легко використовувати свої сценарії, як-от так:

"scripts": {
    "start-dev": "cross-env NODE_ENV=development nodemon --exec babel-node -- src/index.js",
    "start-prod": "cross-env NODE_ENV=production nodemon --exec babel-node -- src/index.js"
}

Масивні реквізити розробникам цього пакету.

npm install --save-dev cross-env

22
heroku config:set NODE_ENV="production"

2
ах, це те, що мені було потрібно. ти приголомшливий
— Connor Leech

5
NODE_ENV=productionтепер за замовчуванням в Heroku node.js розгортається.
— sean

1
heroku - не єдине місце для розгортання
— Pavan Katepalli


6

На OSX я рекомендую додати export NODE_ENV=developmentдо свого ~/.bash_profileта / або ~/.bashrcта / або ~/.profile.

Особисто я додаю цей запис до свого, ~/.bashrcа потім ~/.bash_profile ~/.profileімпортую вміст цього файлу, тож він узгоджується в різних середовищах.

Після внесення цих доповнень не забудьте перезапустити свій термінал, щоб вибрати налаштування.


2

Якщо ви на вікнах. Відкрийте свою cmd в правій папці, а потім спочатку

set node_env={your env name here}

натисніть клавішу Enter, тоді ви можете запустити свій вузол

node app.js

це розпочнеться з вашого налаштування env


1
не зникне він після перезавантаження? Не маю вікон, не можу спробувати себе.
— Лукас Лейсіс

Якщо ви запитуєте про перезапуск вузла ні, він не зникне, поки ви повністю не закриєте командний рядок. Але якщо Windows Server перезапустить ofc, він зникне.
— garenyondem

2
говорити про перезапуск ОС. Ось чому я краще шукаю інший спосіб зупинятися на питанні цього разу щоразу, коли встановлюються оновлення Windows або будь-який перезапуск, про цю проблему.
— Лукас Лієсіс

2

Якщо ви використовуєте веб- пакет у своїй програмі, ви можете просто встановити його там, використовуючи DefinePlugin...

Так що в вашому pluginрозділі, встановіть NODE_ENV на production:

plugins: [
  new webpack.DefinePlugin({
    'process.env.NODE_ENV': '"production"',
  })
]

1

Щоб мати декілька середовищ, вам потрібні всі відповіді раніше (параметр NODE_ENV та експортувати його), але я використовую дуже простий підхід без необхідності нічого встановлювати. У свій package.json просто покладіть сценарій для кожної програми, яка вам потрібна, наприклад:

...
"scripts": {
    "start-dev": "export NODE_ENV=dev && ts-node-dev --respawn --transpileOnly ./src/app.ts",
    "start-prod": "export NODE_ENV=prod && ts-node-dev --respawn --transpileOnly ./src/app.ts"
  }
 ...

Потім, щоб запустити додаток, а не npm startвикористовуватиnpm run script-prod .

У коді можна отримати доступ до поточного середовища process.env.NODE_ENV .

Вуаля.


NODE_ENV повинен бути або "розвитком", або "виробництвом", зазначене вище не розпізнається стороннім кодом (хоча ви можете дивитись на process.env для цього)
— Джон Culviner


0

Даніель має фантастичну відповідь, який є кращим підходом до правильного процесу розгортання (встановити та забути).

Для тих, хто використовує експрес. Ви можете використовувати grunt-express-сервер, який також фантастично. https://www.npmjs.org/package/grunt-express-server


0

Це може бути ймовірність, що ви зробили два екземпляри об'єкта секвелювання

наприклад: var con1 = new Sequelize (); var con2 = new Sequelize ();

ніж також відбудеться та сама помилка

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.