Пользовательские ошибки для веб-пакета: проверка переменных 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(),
]);
}