2016-09-08 32 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

相關問題