Установить переменные с помощью webpack.DefinePlugin из внешнего файла - проблемы с асинхронным чтением
У меня есть две переменные, определенные в файле webpack.config.js, которые я хочу заполнить значениями из внешнего файла с именем Web.config. Для этого внешнего файла у меня есть пакет npm, называемый просто webconfig для анализа переменных, и он работает. Файл анализируется асинхронно, поэтому проблема заключается в правильном создании module.exports.
const webconfig = require("webconfig");
let WEB_API_URL = 'a';
let WEB_APP_URL = 'b';
webconfig
.compile({
sources: [
__dirname + '/Web.config'
]
})
.then(config => {
WEB_API_URL = config.appSettings['__API_URL__'];
WEB_APP_URL = config.appSettings['__APP_URL__'];
});
module.exports = {
//...
plugins: [
new webpack.DefinePlugin({
__API_URL__: JSON.stringify(WEB_API_URL),
__APP_URL__: JSON.stringify(WEB_APP_URL)
})
}
Прямо сейчас определенные свойства экспортируются как 'a' и 'b'. Не могу найти, как экспортировать проанализированные свойства из файла. Какие-либо предложения?
2 ответа
Решение
Наконец-то я получил его на работу:
module.exports = () => {
let config = webconfig
.compile({
sources: [
__dirname + '/Web.config'
]
});
return config.then(data => {
return {
//...
plugins: [
new webpack.DefinePlugin({
__API_URL__: JSON.stringify(data.appSettings.__API_URL__),
__APP_URL__: JSON.stringify(data.appSettings.__APP_URL__)
})
]
}
});
};
У меня есть иерархия конфигов, поэтому обещания будут везде поддерживать асинхронные вызовы веб-пакетов
Решите это с помощью deasync
var webconfig = require("webconfig");
var result;
function getWebConfig() {
webconfig
.compile({
sources: getConfigFilenames(),
})
.done(function (compiledWebConfig) {
result = compiledWebConfig;
});
}
getWebConfig();
while (result === undefined) {
// Use sync call of async function
require('deasync').runLoopOnce();
}
module.exports = result;