Npm запускать с NODE_ENV в качестве параметра

Как я могу передать NODE_ENV в команду npm run в качестве параметра?

Пример файла package.json:

NODE_ENV=8080

...
    "script": {
        "start": "http-server --port $NODE_ENV" // or something similar that
    }
...

Обратите внимание, что NODE_ENV устанавливается другим процессом, из него можно прочитать только npm run.

Я столкнулся с этой проблемой при развертывании моего приложения в героку (они автоматически установят NODE_ENV). Я нашел другое решение этой проблемы на героку, но я все еще хочу знать, есть ли способ передать NODE_ENV в команду npm run.

Принятие любого инструмента? Есть ли проблема с использованием стороннего инструмента?

Batuhan 20.01.2021 19:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
316
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Опция 1: Вам нужно объединить две строки.

NODE_ENV=8080

"script": {
    "start": "http-server --port "+NODE_ENV
}

Вариант 2: Вы можете использовать литералы шаблонов

NODE_ENV=8080

"script": {
    "start": `http-server --port ${NODE_ENV}`
}

В варианте 2 NODE_ENV будет заменено фактическим значением переменной.

Обратите внимание, что это файл package.json, а не файл javascript, поэтому вы не можете писать здесь код javascript. Таким образом, либо конкатная строка, либо шаблонные литералы не работают.

namgold 14.01.2021 04:57

Вы добавили NODE_ENV в переменные среды? Поскольку структура одинакова, я пробовал с разными переменными

Darshan Jain 14.01.2021 05:17
Ответ принят как подходящий

Переменные среды можно использовать напрямую, как вы пытались сделать:

{
  "scripts": {
    "start": "echo $FOO"
  }
}

yarn start и npm run start будут отображать значение переменной среды FOO, если вы запустите этот стартовый скрипт. Я думаю, у вас есть две другие проблемы.

Во-первых, вы пытаетесь использовать переменную среды NODE_ENV, чтобы установить порт, который слушает ваше приложение. Heroku предоставляет это значение через переменную среды PORT , а не NODE_ENV. NODE_ENV будет содержать что-то вроде продакшена.

Во-вторых, вы пытаетесь установить переменную среды в файле package.json. Это возможно, но это переопределит значение, установленное Heroku. Вместо этого рассмотрите возможность использования файла .env в разработке. Его содержимое может выглядеть примерно так:

PORT=8080

Вам понадобятся инструменты для загрузки этого файла и заполнения вашей среды. dotenv — популярный выбор. Обратите внимание, что ваш файл .env не должен быть зафиксирован, поэтому подумайте о том, чтобы добавить его в свой .gitignore.

Существуют и другие методы для установки переменных среды в вашей среде разработки, и любой из них будет работать, если вы предпочитаете.

Собрав все это вместе, ваш package.json должен содержать что-то вроде

{
  "scripts": {
    "start": "http-server --port $PORT"
  }
}

Моя ошибка заключалась в том, что я думаю, что значение порта установлено $NODE_ENV вместо $PORT. Поэтому использование "http-server --port $PORT" вместо "http-server --port $NODE_ENV" решит мою проблему. Спасибо.

namgold 21.01.2021 18:01

Другие вопросы по теме