Как настроить переменные среды для нескольких сред? - PullRequest
0 голосов
/ 17 октября 2019

У меня есть приложение Next.js, и в настоящее время у меня есть эта настройка next.config.js для доступа к моему файлу .env при локальной работе, которая прекрасно работает:

// Initialize doteenv library
require("dotenv").config();

module.exports = {
  webpack: config => {
    // Fixes npm packages that depend on `fs` module
    config.node = {
      fs: "empty"
    };
    /**
     * Returns environment variables as an object
     */
    const env = Object.keys(process.env).reduce((acc, curr) => {
      acc[`process.env.${curr}`] = JSON.stringify(process.env[curr]);
      return acc;
    }, {});

    /** Allows you to create global constants which can be configured
     * at compile time, which in our case is our environment variables
     */
    config.plugins.push(new webpack.DefinePlugin(env));
    return config;
  }
};

Однако, когда приложениепостроен на среде live (platform.sh), мне нужно получить доступ к переменным platform.sh вместо моих переменных .envPlatform.sh предоставляет этот фрагмент кода в качестве примера:

function read_base64_json(varName) {
  try {
    return JSON.parse(new Buffer(process.env[varName], 'base64').toString());
  } catch (err) {
    throw new Error(`no ${varName} environment variable`);
  }
};

// A simple variable.
let projectId = process.env.PLATFORM_PROJECT;

// A JSON-encoded value.
let variables = read_base64_json('PLATFORM_VARIABLES');

Однако я не уверен, где это использовать и как это работает, так что локально он использует мой файл .env и в рабочей среде для использованияпеременные platform.sh. Каков наилучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

dotenv переопределяет переменные среды с содержимым файла. Вы, вероятно, хотите rm .env в вашем хуке сборки.

0 голосов
/ 17 октября 2019

В вашем webpack.config вы можете перенастроить раздел плагинов следующим образом:

plugins: [
    new webpack.DefinePlugin({
      VARIABLE_NAME:
        process.env.NODE_ENV === "production"
          ? VARIABLE_PRODUCTION_VALUE
          : VARIABLE_LOCAL_VALUE
    })
  ]

Вы можете использовать VARIABLE_NAME в любом месте вашего приложения, и оно будет меняться в зависимости от среды.

...