Загрузка переменных среды .env при запуске задачи npm - PullRequest
0 голосов
/ 09 ноября 2018

Допустим, у нас есть файл .env с некоторыми указанными переменными:

AWS_PROFILE=hsz
ENVIRONMENT=development

Также определена простая задача npm:

{
  "name": "project",
  "version": "0.0.1",
  "scripts": {
    "deploy": "sls deploy"
  }
}

Но бег npm run deploy игнорирует наше .env определение.

Это может быть решено с помощью better-npm-run как:

{
  "name": "project",
  "version": "0.0.2",
  "scripts": {
    "deploy": "bnr deploy"
  },
  "betterScripts": {
    "deploy": "sls deploy"
  },
  "devDependencies": {
    "better-npm-run": "^0.1.1",
  }
}

но это выглядит как накладные расходы - особенно когда у нас более 10 задач.

Есть ли лучший способ всегда загружать .env без проксирования всех задач через better-npm-run?

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Немного уродливо, но вы можете попробовать что-то вроде этого:

"scripts": {
  "deploy": "export $(cat .env | xargs) && sls deploy"
}

Это позволит экспортировать все переменные среды из файла .env перед запуском sls deploy.

Есть несколько вариаций этой техники в этом ответе .

Не очень чистый, но позволяет избежать использования дополнительного модуля.

0 голосов
/ 19 июля 2019

Вы можете использовать пакет env-cmd npm для установки переменных среды, загружаемых из файла .env перед выполнением сценария npm.

  1. Добавить пакет в свой package.json devDependencies:
npm i env-cmd -D
  1. Префикс вашего npm-скрипта с помощью программы env-cmd в package.json:
{
  "scripts": {
    "deploy": "env-cmd sls deploy"
  }
}
0 голосов
/ 09 ноября 2018

Поддерживайте и загружайте всю конфигурацию вашей среды в самом проекте.

dev.js

module.exports = {
    "host":"dev.com"
}

prod.js

module.exports = {
    "host":"prod.com"
}

config.js - mainфайл, который разрешает конфигурацию на основе переменной process.env.ENV.

const dev = require('./dev');
const prod = require('./prod');
let envObject = {};
const env = process.env.ENV || "dev";
switch(env) {
    case 'prod':
        envObject = prod;
        break;
    default:
        envObject = dev;
}
envObject['ENV'] = env;
process.env = Object.assign(process.env,envObject); // Optional if you prefer to add them into process environment otherwise `require('./config')` where you need configuration. 
module.exports = envObject;

index.js - вызов корневого файла проекта узла каждый раз при запуске проекта

const config = require('./config');
console.log('config object => ',config.host);

package.json

{
  "name": "project",
  "version": "0.0.2",
  "scripts": {
    "deploy": "sls deploy"
  }
}

Выполнение вашего кода node.js Среда Prod ENV=prod npm run deploy;Среда разработки - npm run deploy;

Среда по умолчанию установлена ​​на dev в ./config.js

При использовании этой простой практики вам не понадобится модуль npm для управления конфигурациями среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...