2015-10-15 32 views
7

如何使用webpack和babel編譯我的代碼,以便導出的函數在全局範圍內可用。如何使用babel和webpack將導出的函數暴露於全局範圍

因此,例如:

export function test(){console.log('test')} 

應該可以window.test()下。

當我剛跑babel -d我得到了我所期望的:

'use strict'; 

Object.defineProperty(exports, '__esModule', { 
    value: true 
}); 
exports.test = test; 

function test() { 
    console.log('test'); 
} 

但輸出的WebPack看起來是這樣的:

!function(e) { 
    function t(r) { 
    if (o[r])return o[r].exports; 
    var n = o[r] = {exports: {}, id: r, loaded: !1}; 
    return e[r].call(n.exports, n, n.exports, t), n.loaded = !0, n.exports 
    } 

    var o = {}; 
    return t.m = e, t.c = o, t.p = "", t(0) 
}([function(e, t) { 
    "use strict"; 
    function o() { 
    console.log("test") 
    } 

    Object.defineProperty(t, "__esModule", {value: !0}), t.test = o 
}]); 

結束test功能在全球範圍內都有效。

+0

對此有何更新?我一直在努力學習現在就做同樣的事情。 –

+0

我試圖做同樣的事情,只動態創建窗口/全局變量。 Expose-loader可以工作,但是當你需要暴露一個TON的全局變量 – user1828780

回答

0

退房: https://webpack.github.io/docs/library-and-externals.html#examples

通過設置輸出屬性,你想換任何名義您的全局將允許你再調用:YourLibrary。測試();

module.exports = { 
    entry: ['./_js/script.js'], 
    output: { 
     library: 'YourLibrary', 
     path: __dirname, 
     filename: './build/script.js' 
    } 
+4

但是如何在上面的例子中僅僅導出一個函數 –

+0

你打算把'YourLibrary()'作爲一個函數來調用時,我不知道if這是可能的。但是,你只能公開/導出一個單一的函數,例如export函數foo(){...'然後調用'YourLibrary.foo()' – glued

+1

是的,但是我需要在'YourLibrary中導出的其他模塊中調用函數。 FOO()' –

相關問題