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

У меня есть проект, скомпилированный с помощью веб-пакета. Существуют отдельные сборки для разработчиков и разработчиков, отличающиеся 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 ответ

Решение

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

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(),
  ]);

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