当前位置:  开发笔记 > 开发工具 > 正文

Babel插件运行顺序

如何解决《Babel插件运行顺序》经验,为你挑选了1个好方法。

TL; DR:有没有办法指定Babel插件应该运行的顺序?巴别塔如何确定此订单?除了潜入巴别塔资源外,有什么规格可以解决这个问题吗?

我正在开发自己的Babel插件.我注意到,当我运行它时,我的插件在其他es2015插件之前运行.例如,具有以下代码:

const a = () => 1

和访客如:

visitor: {
  ArrowFunctionExpression(path) {
    console.log('ArrowFunction')
  },
  FunctionExpression(path) {
    console.log('Function')
  },
}

我的插件观察ArrowFunction(而不是Function).我玩了Babel配置中列出插件的顺序,但这没有改变任何东西:

plugins: ['path_to_myplugin', 'transform-es2015-arrow-functions'],
plugins: ['transform-es2015-arrow-functions', 'path_to_myplugin'],

OTOH,这看起来像命令在某种程度上重要:

https://phabricator.babeljs.io/T6719

----编辑----

我发现如果我把访问者写成如下:

  ArrowFunctionExpression: {
    enter(path) {
      console.log('ArrowFunction')
    }
  },
  FunctionExpression: {
    exit(path) {
      console.log('Function')
    }
  },

这两个函数都被调用.因此看起来执行的顺序是:myplugin_enter - > other_plugin - > myplugin_exit.换句话说,myplugin似乎在某个内部管道中的other_plugin之前.然而,主要问题保持不变 - 管道中插件的顺序应该以某种方式确定和配置.



1> loganfsmyth..:

插件的顺序基于在.babelrc预设之前运行的插件中的事物的顺序,并且每个组在之前的插件/预设之前运行插件/预设.

但关键是订购是按AST节点排序的.每个插件都不进行完全遍历,Babel执行单个遍历并行运行所有插件,每个节点一次处理一个运行每个插件的每个处理程序.


此外,你写了'...并且每个组在之前的插件/预设之前运行插件/预设.'.你能解释一下,'群'是什么意思?
我有类似的情况.你有更高范围的另一个访问者功能,可能是与你的实际访问者调用`path.traverse`的`Program`?我想这首先会被称为.
@loganfsmyth - 我看到插件按顺序运行.https://gist.github.com/jamestalmage/885e1d0d732557cfb5cf854aee04fd19?ts=2
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有