2016-07-14 79 views
1

这是我能做到的最简单的。Babel在特定的场景中用下划线加前缀变量

一部开拓创新

var a = { 
    a: function() { 
     a.b; 
    } 
}; 

babel js -d lib --presets es2015

"use strict"; 

var _a = { 
    a: function a() { 
     _a.b; 
    } 
}; 

它改变它弄乱了使用它的广泛我已经写代码的全局变量。请注意,只有在父和子具有相同名称并且我尝试访问子内的任何父级属性表单时才会发生。

如果名称不同(a),或者如果我不访问任何根对象的属性(a.b),则不会添加下划线。

我也知道下划线只会在es2015预设中出现,但这是有道理的,因为这些是我拥有的唯一插件。

+0

究竟什么是你的问题吗? – Timo

+0

如何阻止它添加下划线?我所有的代码都使用这个全局变量。重要的是它不会改变它的名字。 – Achshar

回答

2

Babel假定文件的顶级范围是模块范围,而不是全局范围,因此重命名变量是安全的。如果你想要某种东西是全球性的,你最好是明确表达它,例如

var a = { 

global.a = { 
window.a = { 
+0

就是这样!谢谢! :) – Achshar

+0

我见过使我质疑这种逻辑的案例。大部分都与角度的依赖注入逻辑有关。 Angular明确地看待函数参数,所以有时需要从任何逻辑中排除那些产生下划线的东西。你知道是否有任何选项可以包含或排除下划线?我甚至不确定哪个确切的插件可以做到这一点。 – trysis

+0

您可能会对https://www.npmjs.com/package/babel-plugin-angularjs-annotate感兴趣不幸的是,您所看到的行为是不可避免的。在某些情况下重命名事物是需要创建有效的ES6功能的。 Angular依赖的'.toString'行为在ECMAScript规范中并没有得到保证,依靠它,这是他们糟糕的选择。 – loganfsmyth