Javascript Babel在特定场景中以下划线作为变量前缀

Javascript Babel在特定场景中以下划线作为变量前缀,javascript,babeljs,Javascript,Babeljs,这是我能做的最简单的了 原始的 var a = { a: function() { a.b; } }; 在巴贝尔js-d库之后——预设es2015 "use strict"; var _a = { a: function a() { _a.b; } }; 它改变了一个全局变量,这会弄乱我已经编写的广泛使用它的代码。请注意,只有当父级和子级具有相同的名称,并且我试图访问子级中父级的任何属性表单时,才会发生这种情况 如果名称不相同

这是我能做的最简单的了

原始的

var a = {
    a: function() {
        a.b;
    }
};
在巴贝尔js-d库之后——预设es2015

"use strict";

var _a = {
    a: function a() {
        _a.b;
    }
};
它改变了一个全局变量,这会弄乱我已经编写的广泛使用它的代码。请注意,只有当父级和子级具有相同的名称,并且我试图访问子级中父级的任何属性表单时,才会发生这种情况

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


我还知道,下划线只在es2015预设中出现,但这是有意义的,因为这些是我仅有的插件。

Babel假设文件的顶级作用域是模块作用域,而不是全局作用域,因此重命名变量是安全的。如果你希望某件事情是全球性的,你最好把它说清楚,例如

var a = {
对其中一个

global.a = {
window.a = {

你的问题到底是什么?我如何阻止它添加下划线?我所有的代码都使用这个全局变量。重要的是它不能改变它的名字。就是这样!谢谢!:)我见过一些让我质疑这种逻辑的案例。大多数都与angular的依赖注入逻辑有关。Angular明确地查看函数参数,因此有时需要从创建下划线的逻辑中排除这些参数。您知道是否有任何选项可以包含或排除下划线?我甚至不确定哪个插件能做到这一点。不幸的是,你看到的行为是不可避免的,你可能会对此感兴趣。在某些情况下,需要重命名东西才能创建有效的ES6功能。在ECMAScript规范中,Angular依赖的
.toString
行为不能保证,依赖它对他们来说是一个糟糕的选择。现在我使用gulp ng annotate。我试过那个插件,但没用,我忘了为什么。我可能会在某个时候再试一次。我同意这是一个错误的决定,但由于angular非常流行,而且版本1仍然很流行,所以这种行为不可避免,这仍然太糟糕了。我们希望能很快做出反应,但你知道,实际工作胜过学习酷的新框架。