Webpack的自定义错误:检查环境变量

时间:2019-01-30 21:15:29

标签: javascript webpack webpack-3

我有一个使用webpack编译的项目。有单独的开发和生产版本,由NODE_ENV环境变量来区分。对于开发版本,需要另一个环境变量:REPO_PATH

webpack中是否可以检查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 :(得分:0)

到目前为止,我想出的最好的解决方案是编写一个简单的Webpack插件,该插件检查列出的每个环境变量是否存在,如果缺少任何环境变量,则会引发错误。

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

}