webpack.config.js 在 exports 配置之前,能先执行一段异步代码到? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yazoox
V2EX    webpack

webpack.config.js 在 exports 配置之前,能先执行一段异步代码到?

  •  
  •   yazoox 2022-03-24 18:34:18 +08:00 1599 次点击
    这是一个创建于 1297 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想先执行一段异步代码,如下,把 commitHash 写入到 process.env 里面去,然后再返回 webpack 的配置:

    async function getLastCommitHash() { return new Promise(resolve > { require('child_process').exec('git rev-parse HEAD', function(err, stdout) { resolve(stdout); }); } } const run = async () => { const commit = await getLastCommitHash(); return { ... plugins: new webpack.DefinePlugin({ "process.env": commit }) } } 

    我参考了一下这里的做法: https://stackoverflow.com/questions/53991856/how-do-i-await-a-piece-of-code-within-weback-config

    module.exports = run(); 或者
    module.exports = run; 貌似都不行。

    这,有没有办法,在 webpack.config.js 里面,先执行一段异步代码再返回配置呢?

    11 条回复    2022-03-25 13:30:20 +08:00
    Biwood
        1
    Biwood  
       2022-03-24 20:08:53 +08:00
    官方文档写的是可以直接 return 一个 Promise 对象,不过只能作用于 webpack-cli ,无法用 webpack 函数式接收这类配置。

    https://v4.webpack.js.org/configuration/configuration-types/#exporting-a-promise
    waiaan
        2
    waiaan  
       2022-03-25 09:05:44 +08:00
    可不可以先执行你的异步代码,把结果放到全局变量里,然后再运行 webpack 。
    yazoox
        3
    yazoox  
    OP
       2022-03-25 09:40:43 +08:00
    @Biwood
    thx. 这个方法可以工作。
    yazoox
        4
    yazoox  
    OP
       2022-03-25 09:46:45 +08:00
    @Biwood
    btw, 兄弟,我碰到这个问题后,也 google 了半天,找了官方文档, stackoverflow 看。但最终没有“定位”到你提到的那篇文章。
    你是怎么搜索,通过什么关键字,或者思路,找到这个答案的?还是说,你以前 /本来就知道,只是找了官方文档分享出来?
    谢谢!
    duan602728596
        5
    duan602728596  
       2022-03-25 10:37:29 +08:00
    其实是可以的,关键词:Top-level await
    yazoox
        6
    yazoox  
    OP
       2022-03-25 10:44:09 +08:00
    @duan602728596
    试过了,不行啊 ~ 我们的 node 是 14.17 ,webpack version 是 4.44 版本

    const commitId = await getLastCommitHash();
    ^^^^^
    SyntaxError: await is only valid in async funcion
    duan602728596
        7
    duan602728596  
       2022-03-25 10:53:24 +08:00
    @yazoox Top-level await 只支持 ESM 模块
    Biwood
        8
    Biwood  
       2022-03-25 11:11:27 +08:00 via iPhone
    @yazoox 我回去看了下搜索记录,我用的关键词是“webpack module export async”,第一条结果就是了,了。还有就是我自己的习惯,永远先看官方文档,原版文档没提到的再看 github/stackoverflow 等等,顺着这个思路能解决 90%的问题。
    yazoox
        9
    yazoox  
    OP
       2022-03-25 11:13:00 +08:00
    @duan602728596
    看了一下官方文档,webpack 4.5 以上版本就支持了。( https://github.com/webpack/webpack-cli/releases/tag/webpack-cli%404.5.0)
    不过,这个工作量有点大。有空试试
    谢谢
    yazoox
        10
    yazoox  
    OP
       2022-03-25 11:15:13 +08:00
    @Biwood thx. ;-)
    duan602728596
        11
    duan602728596  
       2022-03-25 13:30:20 +08:00
    @yazoox 所以你才需要把 webpack.config.js 修改为 webpack.config.mjs
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2198 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:53 PVG 08:53 LAX 17:53 JFK 20:53
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86