- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前 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 ),但是这样您就可以集成任何能够理解源代码的工具。
但是,有一种趋势是使编译器更具可插拔性。最突出的例子是Babel和 PostCSS .因此,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/
我正在尝试检查 Go 源代码以制作一个工具。为此,我使用 ast.Inspect 函数。 我需要知道函数/方法内部如何使用 channel 。 我将此作为要检查的示例代码: package main
我正在为我自己的语言制作一个解释器作为一个业余爱好项目。目前我的解释器只是执行它看到的代码。我听说你应该让解析器从源代码生成 AST。所以我想知道,正如解析器所见,AST 实际上如何使事情比仅仅线性执
我正在为 JavaScript 实现一个突变测试工具。修改 AST 并针对修改后的代码执行测试用例。运行测试用例后,我想将修改后的 AST 恢复为原始 AST,以便我可以重复变异过程。但是,我不知道如
AST 文档:https://www.dartdocs.org/documentation/analyzer_experimental/0.8.0/analyzer/parseCompilationU
更新2:再次感谢@deepak-azad,我设法解决了我的问题:这里是主代码的链接:https://gist.github.com/1714641 更新:感谢@deepak-azad,我补充了代码,但
我正在编写一些 Go AST 代码,而编译器在这一行上令人窒息: var call ast.Expr = ast.CallExpr{Fun: ast.NewIdent("foo"), Args: []
我正在对 c 程序进行静态分析。我搜索了 antlr 网站,似乎没有合适的语法文件为 c 程序生成 ast。这是否意味着我必须从一开始就自己做。或者是有一个更快的方法。我还需要一个可以遍历解析器创建的
是否可以像这样采用带引号的 Elixir 表达式(AST 树): quote do: 1 + 1 => {:+, [context: Elixir, import: Kernel], [1, 1]}
我遇到了这个异常: unexpected AST node: query 我的查询是: SELECT u.user_id, u.username,u.email,u.phone,u.status,r
我是 Java 编程语言的初学者。我想从 java 源代码中提取 AST 并将 AST 打印到文件或标准输出。 我按照本教程学习了如何使用 AST。 http://www.programcreek.c
NodeVisitor 以深度优先的方式遍历 AST,并且在进入时仅访问每个节点一次。因此,用它做一些严肃的事情是有问题的。是否可以更改其默认行为? 最佳答案 也许有人会对一些草拟的例子感兴趣,如何做
目前,我正在努力用 Java 表示我用 SML 编写的 AST 树,这样我就可以随时用 Java 遍历它。 我想知道是否应该在 Java 中创建一个 Node 类,其中包含我想要表示的数据,以及一个数
我正在尝试修改/重构输入的 C 源代码。我试图在输入代码的每一行之后添加一个 printf 语句。 例如如果我的输入是 - void foo(){ // Sample input code
我目前正在使用 eclipse AST 来生成源代码。除了在大多数示例中,我是在独立应用程序中从头开始生成源代码,而不是在 eclipse 插件中。 当从 ASTParser 读取时,您可以通过调用
我有一个 HQL 查询: query = select item.itemNumber from items item where item.stock>0 and item.price it = q
根据 Om Next's documentation : query->ast (om.next/query->ast '[(:foo {:bar 1})]) Given a query expres
如果能学到一些有用的东西,我会非常感激,至于现在,我一直在盲目地行动。所以问题出在python的ast.NodeTransformer上。我想知道是否可以使用这种方式向现有类添加一个函数,而不是生气。
我们希望为 Elixir 开发一个静态代码分析器,以检测并发问题(主要是死锁和竞争条件)。我们对分析器的结构有了一些基本的了解,但我们的问题是哪种 AST 更适合这项任务。正如我们所了解的,Elixi
我在以下代码段中遇到错误 using (var session = Database.OpenSession()) { var q = from x in session.Query()
我正在使用以下 C# 代码: public IList GetAllByExpression(Expression> expression, int startIndex, int count, Fu
我是一名优秀的程序员,十分优秀!