当前位置: 首页 > 知识库问答 >
问题:

Webpack插件:如何在编译后修改和重新解析模块?

东郭弘方
2023-03-14

我正在开发一个webpack插件,不知道如何在构建过程中修改模块。我想做的是:

    null
    null

看起来rebuildModule应该重新解析源代码,重新建立依赖关系等,但它并没有解析我的require语句并将它们更改为webpack requires。构建的文件包括我修改过的源代码,但需要(“...”)语句未修改。

我如何使我修改的模块“更新”,以便webpack将处理我添加的源代码与最初解析的源代码相同?除了rebuildModule()之外,我还需要做什么吗?我在构建过程中做这项工作是否太晚了?还是我走错路了?

共有1个答案

符鸿光
2023-03-14

我想出了如何以一种相当无痛的方式做到这一点。

我做错的事情:

  • 可能是太晚了?最早可以实现这一点的插件是编译的“密封”插件。尽管有这个名字,这个插件钩子是作为密封函数的第一行执行的,所以还没有发生密封。此时,所有模块都已加载。
  • rebuildmodule()不是一个好主意,因为它从头开始重新加载模块:文件的源代码被加载并通过任何适用的加载程序传递,并且module对象的_source属性最终在该过程完成后重新分配。
    • 此时使用rebuildmodule()实际上会很好,如果有一种方法可以在此调用中加载模块时修改模块源(即动态分配一个只在此重建中使用的加载器函数)。然后,我们就可以利用模块的源代码加载时发生的sourceMap行为(见下文)
    module.parse.parse(module._source.source(), {
      current: module, 
      module.module,
      compilation: compilation,
      options: compilation.options
    });
    

    此实现将修改和解析的源代码转换为最终输出。由于在NormalModuleMixin的doBuild方法中有一些sourceMap的内容,并且在调用这些函数之后我将添加到源代码中,所以我假设sourceMap现在会被搞乱。因此,下一步是获取sourceMap以反映代码添加。不确定是尝试手动更新sourceMap还是研究上面的想法,尝试动态应用加载程序并调用rebuildModule()而不是解析。

    如果你知道一个更好的方法做以上任何一个,请让我知道!

 类似资料:
  • 问题内容: 我需要修改现有的APK,修改源,然后重新编译。 我可以使用dex2jar或apktool对其进行反编译,效果很好 从jar文件中,我可以获取Java源代码(使用jd-gui) 然后我可以修改Java文件 但是现在我想知道如何重新编译java文件并将它们放回jar文件中!(jar部分应该很简单,主要问题似乎是如何为Android重新编译Java文件) 我知道另一种解决方案是使用apkto

  • 问题内容: 我正在Mac OS X上运行最新版本的Node。我已经与Stylus一起安装了Express。也是最新版本。 当我修改 .styl 文件时,手写笔不会重新编译它们。我怎样才能解决这个问题? 重新编译我的 .styl 文件的唯一解决方案是删除已编译的 .css 文件…重新启动我的应用程序,或者执行clear-cache- refresh(CMD + Shift + R)不会导致重新编译-

  • 问题内容: 我只是好奇地知道这一点,当我不进行“清理”就安装mvn时,maven仅编译了修改后的java文件。Maven如何识别Java文件是否被修改?我相信它没有使用文件的最后修改属性。 我相信的原因:我有一个模块,在合并了svn的更改后,我进行了mvn install,但它没有编译修改后的文件,当我查看更改时,我发现其中的’long’被修改为’Long’吸气剂和二传手。 所以我只想知道Mave

  • 我只是很想知道这一点,当我给mvn安装而不做“clean”时,maven只编译修改过的java文件。maven如何识别java文件是否被修改?我相信它不是在使用文件的最后一个修改的属性。 我相信的原因:我有一个模块,在合并了svn的一个更改后,我给了mvn安装,它没有编译修改过的文件,当我查看更改时,我看到getter和setter中的“long”被修改为“long”。 所以我只想知道maven是

  • WooCommerce是一款非常灵活的电子商务WordPress插件,喜欢它的原因很多,除了漂亮的界面、人性化的后台、很少的数据表等等,还有一个重要的原因是修改功能比较方便,比如修改WooCommerce的默认模版。 WooCommerce提供两种修改模版的方法,一个是通过钩子函数,这也是WordPress中最常见的修改方式;另一个方法是“覆盖”模版。 覆盖这种方式在WordPress插件中也比较

  • 我尝试在我的IntelliJ IDE下设置Maven项目。然而,当我尝试更新pom时。xml文件,我收到这个错误。我尝试删除用户下的.m2存储库,并在Maven构建工具下进行了更改。然而,这个问题似乎没有得到解决。