Пользовательские ошибки для веб-пакета: проверка переменных env - PullRequest
0 голосов
/ 31 января 2019

У меня есть проект, скомпилированный с помощью веб-пакета.Существуют отдельные сборки dev & production, отличающиеся переменной среды NODE_ENV.Для сборки dev требуется другая переменная env: REPO_PATH.

Есть ли в веб-пакете способ проверить наличие или отсутствие REPO_PATH, выдать пользовательскую ошибку и завершить сборку, если она есть?не задано?

Мое текущее решение использует package.json сценариев:

package.json

{
  ...
  "scripts": {
    "dev": "if test -z $REPO_PATH; then echo \"Please set REPO_PATH"; exit 0; fi && NODE_ENV=development webpack --progress --hide-modules"
  }
}

Это работает, но не идеально, так как некоторые из нашихразработчики используют Windows-машины, и приведенное выше утверждение if / then относится только к Unix-системам.

Это также выглядит как нечто, что должно быть возможно с помощью небольшого плагина или чего-то подобного, но я не знаю, что я 'ищу.

1 Ответ

0 голосов
/ 31 января 2019

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

var externalDevLibraries = [
  'VARIABLE_1_NAME',
  'VARIABLE_2_NAME',
];


class EnvCheckerPlugin {

  apply(compiler) {
    compiler.plugin("environment", function (compilation, callback) {
      console.log('Checking for necessary env variables...')

      var missingEnvVars = [];
      for (let i = 0, l = devEnvVars.length; i < l; i ++) {
        var env = devEnvVars[i];
        if (!process.env[env]) {
          missingEnvVars.push(env);
        }
      }

      if (missingEnvVars.length) {
        console.error(chalk.yellow("Please set the following env variables.\nThen, try re-running the dev build."));
        console.error(chalk.red(`  - ${missingEnvVars.join('\n  * ')}`));
        throw new Error('Missing env variables. Please see additional logging above');
      }
    });
  }
};

ЭтоПлагин используется только при NODE_ENV=development, как указано ниже:

if (process.env.NODE_ENV === 'development') {
  // ... other dev-specific stuff

  module.exports.plugins = (module.exports.plugins || []).concat([
      // other dev-specific plugins... 
      new EnvCheckerPlugin(),
  ]);

}
...