2017-06-20 121 views
1

我有我的反應申請從webpack編譯。我使用谷歌recaptca的回調URL像這樣:從全球範圍訪問webpack模塊/變量

<script defer src='https://www.google.com/recaptcha/api.js?render=explicit&onload=mywebpackfn'></script> 

mywebpackfn定義裏面我的WebPack編譯js文件。 api.js找不到它。我如何從外部訪問webpack js範圍?

回答

1

你可以簡單地將你的函數暴露給全局範圍。裏面的代碼

if(typeof window !== 'undefined') { // browser env 
    window.mywebpackfn = yourFunction 
} 

還是什麼花哨的訪問全球範圍

// I know kung fu 
(new Function('return this')()).mywebpackfn = yourFunction 

你也可能要編譯你的代碼庫https://webpack.js.org/configuration/output/#output-library

的WebPack配置

output: { 
    .. 
    library: 'mywebpackfn', 
    libraryTarget: 'window' 
} 
+0

目前我正在執行您列出的第一個選項,但我希望有一個不太方便的方法。第二種選擇對我來說似乎是巫術。 – tgun926

+0

@ tgun926您也可以將代碼編譯爲庫https://webpack.js.org/configuration/output/#output-library –

0

如果您熟悉nodejs,那麼你可以在你的服務器之外創建你的節點服務器t webpack和api.js.以這種方式,節點服務器對於webpack和api.js都是通用的。 通過這種方式,您可以從webpack導出您的文件,該文件仍將由該nodejs服務器通過api.js進行導入。

希望這會有所幫助。

0

如果你想保留的東西通過的WebPack控制,而不是直接在你的代碼庫分配到窗口,你可以使用expose-loader

https://github.com/webpack-contrib/expose-loader

也可以指定的WebPack的output.library選項,將公開您輸入文件作爲全局範圍內的對象導出 - 您可以從那裏導出您的回調