gpt4 book ai didi

webpack - webpack 会采用 AST 作为模块输入吗?

转载 作者:行者123 更新时间:2023-12-05 00:19:15 26 4
gpt4 key购买 nike

目前 webpack 处理文件,它通过加载器解析文件以确定依赖关系。

使用 babel 时,babel 解析一个文件,并有足够的信息直接告诉 webpack 它有哪些依赖项。据我所知,没有办法将这些丰富的信息直接传递给 webpack,babel 必须生成一个 JavaScript 文件作为文本,然后 webpack 将重新解析该文件以提取依赖信息。

(a) 我的总结正确吗?这是目前发生的情况吗?
(b) 是否有任何计划允许这样的层之间更紧密地集成?我希望这会对构建时间产生相当大的影响。

最佳答案

(a) 是的,这个总结是正确的。这主要是因为不同工具之间没有通用的 AST 格式。最近,ESTree Spec 改变了这种情况。 .但是,我不知道这些 AST 在实际项目中的互操作性如何。比较 astexplorer.net 上的 AST ,看起来 AST 有点相似。 Webpack 目前的设计很浪费,但提供了良好的互操作性。

(b) 我不知道有任何计划。但我也已经考虑过了。 JS 不是唯一被多次解析的语言:在大多数 webpack 构建链中,Sass 被解析并转换为 CSS,CSS 由 postcss-loader 解析,通常应用自动前缀并输出 CSS,然后 CSS 被再次解析css-loader(有趣的是 PostCSS 又一次)并被转换为 JS,由 webpack 再次解析以找出依赖关系图。这是非常低效的(和 can already be a problem ),但是这样您就可以集成任何能够理解源代码的工具。

但是,有一种趋势是使编译器更具可插拔性。最突出的例子是BabelPostCSS .因此,autoprefixer-loader已弃用,取而代之的是 PostCSS 插件。甚至官方委员会成员也致力于 API 来拦截浏览器内部的语言处理,例如 CSS-TAG Houdini Task Force。或 JavaScript decorators proposal .

我期待更多像 Babel 和 PostCSS 这样的工具出现。这可能会减少 webpack 构建链中单独的加载器完成的工作,而在这些工具环境中完成更多工作——这实际上是一件好事,因为这些工具可以在 webpack 上下文之外重用。看到更多的编译器提供跳过代码生成并立即重用 AST 的方法真是太好了。

关于 webpack 的现状:

还有一个鲜为人知的加载器功能,称为 value / inputValue .它旨在作为一种将元信息从一个加载器传递到另一个加载器的方式。因此它可以用作a shortcut to skip needless parsing .您可以将此功能与 webpack@1 一起使用。但是,这个功能目前在 webpack@2 的 beta 分支上是不可用的(不知道为什么)。
— sokra 告诉我,他已经在 webpack@2 中删除了这个遗留功能,所以不再安全使用

加载器可能有多个输入和输出。由于 JavaScript 不允许多个 return值,输出只能通过调用 this.callback 来实现.当前的约定是第一个值始终是实际的加载器内容。第二个值是源映射(如果激活)。所以我们可以使用第三个值作为传递 AST 的一种方式。然而,这目前还没有实现。但我们可以从它开始。

顺便说一句:Mark Finger最近对这个主题做了一些有值(value)的研究。您可能对 his findings 感兴趣也是。

关于webpack - webpack 会采用 AST 作为模块输入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36329964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com