如何在webpack构建过程中忽略await/promises

a7qyws3x  于 7个月前  发布在  Webpack
关注(0)|答案(1)|浏览(88)

我需要在运行时动态设置一个配置选项,这样服务器就可以决定选项。目前我有:

source.js

const config = {"option1: "lindsay", "option2": "lohan"};
const myObject = myApp(config);

字符串

webpack.config.js

module.exports = [{
    entry: {
        "myfile": "./assets/js/source.js",
    },
    output: {
        path: __dirname + "/js/",
        library: {
            name: "myLibrary",
            type: "var",
        }
    },
    mode: "production"
}]


这将成功构建一个模块,我可以通过myLibrary.myFunction()调用它
但是,如果我将配置更改为在运行时加载;

source.js

const response = await fetch('./config.json');
const config = await response.json();
const myObject = myApp(config);


然后在构建时以某种方式进行了不同的解释(显示了更多的输出),当部署时,它现在是一个promise,因此我必须使用以下内容启动它:
random.js**

myLibrary.then((foo) => { foo.myFunction(); });


有没有什么方法可以避免这种情况,使await命令在构建时被忽略或延迟,以便只在部署的环境中调用它们。
我玩过externals,但这似乎与import s等有关,我不需要忽略。
Webpack并没有出错,因为它构建得很好,它只是构建了一些我没有预料到的东西。

版本号

我正在使用:

webpack --version
  
Binaries:
  Node: 18.13.0 - /usr/bin/node
  npm: 9.2.0 - /usr/bin/npm
Packages:
  webpack: ^5.88.2 => 5.88.2 
  webpack-cli: ^5.1.4 => 5.1.4

siv3szwd

siv3szwd1#

如果source.js在顶层有await,它将返回一个promise。
我认为你应该改变初始化配置的方式。例如,你可以删除作为myApp参数的config,并单独初始化它:

const myObject = myApp()

const getConfig = async () => {
    const response = await fetch('./config.json')
    const config = await response.json()

    myObject.setConfig(config)
}

getConfig()

export default myObject

字符串
当然,最初“myObject”在被获取之前不会有配置,但对象本身将可用。
在这里我需要知道你的应用程序是如何工作的。有几个变体,你可以做到这一点,但我需要更多关于你的应用程序的信息,以了解什么是最好的解决方案。

相关问题