node — package.json: как выполнить скрипт, который устанавливает переменные среды

#node.js

#node.js

Вопрос:

Я бы хотел внутри моего package.json выполнить некоторый скрипт, который установит переменные среды, которые может использовать мое приложение. Мне нужно что-то вроде этого (в моем package.json)

   "scripts": {
    "dev": "set-env-vars.sh amp;amp; webpack-dev-server --hot --inline amp; cd server amp;amp; NODE_ENV=development node app.js",
  },
  

Это мой set-env-vars.sh файл:

 #!/bin/bash
export ENV_MONGODB_URI="mongodb://localhost:27017/mydb"
...
  

Я знаю, что мне нужно использовать исходный код или. чтобы экспортировать мои переменные в оболочку, это работает в оболочке, но не для моего package.json dev-script.

Какие-либо решения для достижения этой цели? Спасибо.

Ответ №1:

Проблема заключается в одном амперсанде (amp;) после вызова webpack-dev-server. Завершающий амперсанд направляет командную оболочку на выполнение команды в фоновом режиме. На практике ваша команда будет разделена на 2 части, которые будут вызываться в отдельных оболочках асинхронно. Если вы используете амперсанд (amp;) намеренно, то вы должны использовать переменные env в обеих частях следующим образом:

 . ./set-env-vars.sh amp;amp; webpack-dev-server --hot --inline amp; . ./set-env-vars.sh amp;amp; cd server amp;amp; NODE_ENV=development node app.js
  

итак, переменные из set-env-vars.sh будет доступен как для webpack-dev-сервера, так и для узла

Или, если вы хотите запустить его синхронно:

 . ./set-env-vars.sh amp;amp; webpack-dev-server --hot --inline amp;amp; cd server amp;amp; NODE_ENV=development node app.js
  

Комментарии:

1. Проблема в том, что когда я добавляю . или source внутри скрипта, я получаю это: sh: line 0: .: set-env-vars.sh: file not found

2. Я думаю, вам следует использовать ./set-env-vars.sh вместо set-env-vars.sh выполнения файла из текущего каталога.

3. Итак, наконец, это работает: webpack-dev-server --hot --inline amp; . ./set-env-vars.sh amp;amp; cd server amp;amp; NODE_ENV=development node app.js Спасибо!)