установить переменные с помощью webpack.DefinePlugin из внешнего файла - проблемы с асинхронным чтением - PullRequest
0 голосов
/ 28 мая 2018

У меня есть две переменные, определенные в файле 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 ]

0 голосов
/ 07 сентября 2018

У меня есть иерархия конфигов, поэтому повсюду обещания будут поддерживать асинхронные вызовы веб-пакетов

Решите это с помощью 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;
0 голосов
/ 28 мая 2018

Наконец я получил его на работу:

    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__)
                    })
                ]
            }
        });
    };
...