我可以阻止babeljs将函数转换为本地var吗?

时间:2016-09-08 13:49:31

标签: javascript angularjs ecmascript-6 babeljs

我有一个用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?

1 个答案:

答案 0 :(得分:2)

你不应指望吊起Babel不知道的范围。首先包装ES6并转换整个脚本,或者只使用

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

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

代替。