2016-09-08 35 views
0

我有一个用ES2015编写的应用程序,我使用babeljs将代码转换为ES5。我有一个包含代码的函数,但该函数被转换为分配给var的函数表达式。这可能通常会很好,但我的JavaScript代码中有很多包装器,它们将输出babel包装到各种输出中(一个用于将对象加载到窗口上,另一个用于将其包装在角度服务中),以便它可以在许多方面消耗。我可以阻止babeljs将函数转换为本地var吗?

我想它采用了棱角分明,在这里消费是源(ES2015)的示例代码:

function code() { 
    return { 
    function1: function1, 
    function2: function2 
    } 

    function function1() { 
    const foo = "bar" 
    //.. 
    } 

    function function2() { 
    //.. 
    } 
} 

这transpiles到:

var code = function code() { 
    return { 
    function1: function1 
    function2: function2 
    }; 

    function function1() { 
    var foo = "bar"; 
    //.. 
    } 

    function function2() { 
    //.. 
    } 
} 

注意,整个事情是分配给名为codevar

在我的包装,我将它包装在这样的角度服务:

(function() { 
    angular 
     .module(angular._MODULE_) 
     .service('someService', code); 

    <%- include('../lib/code.js') %> 
}()); 

其中../lib/code.js是transpiled ES5输出。

这对角度没有好处,因为它无法访问本地变量。

我该如何阻止babel将其分配给var?

+0

Afaik,Babel只有在您将函数声明放入块中时才会这样做。 – Bergi

回答

2

你不应该指望吊装到巴贝尔不知道的范围。首先将ES6包装并整个脚本进行传输,或者仅使用

(function() { 
    <%- include('../lib/code.js') %> 

    angular 
     .module(angular._MODULE_) 
     .service('someService', code); 
}()); 

代替。

+0

谢谢,虽然这几乎肯定是正确的,但我确实有点愚蠢。我在atom中打开了传输文件,我想babel无法输出新文件,因为我正在进行更改。我没有得到任何更新的输出,所以假设我试过的东西没有工作。哎呀。 – Rodders

+0

更新,这正是我选择的方法,而不是将我的const更改为函数,所以再次感谢:) – Rodders

相关问题