我有一个使用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系统。
使用小型插件或类似工具似乎应该可以实现,但我不知道自己在寻找什么。
答案 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(),
]);
}