我有一个用ES2015编写的应用程序,我使用babeljs将代码转换为ES5。我有一个包含代码的函数,但是这个函数被转换为分配给var
的函数表达式。这可能通常很好但我在我的JavaScript代码中有一些包装器将输出babel包装到各种输出中(一个用于将对象加载到窗口上,另一个用于将它包装在角度服务中等)以便它可以在很多方面消费。
我尝试使用Angular来使用它,这是源代码(ES2015)的一个例子:
function code() {
return {
function1: function1,
function2: function2
}
function function1() {
const foo = "bar"
//..
}
function function2() {
//..
}
}
这可以转化为:
var code = function code() {
return {
function1: function1
function2: function2
};
function function1() {
var foo = "bar";
//..
}
function function2() {
//..
}
}
请注意,整个内容已分配给名为var
的{{1}}。
在我的包装器中,我将它包装在这样的角度服务中:
code
其中(function () {
angular
.module(angular._MODULE_)
.service('someService', code);
<%- include('../lib/code.js') %>
}());
是已编译的ES5输出。
这对于角度没有好处,因为它无法访问本地var。
如何阻止babel将其分配给var?
答案 0 :(得分:2)
你不应指望吊起Babel不知道的范围。首先包装ES6并转换整个脚本,或者只使用
(function () {
<%- include('../lib/code.js') %>
angular
.module(angular._MODULE_)
.service('someService', code);
}());
代替。