2017-06-20 63 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选项,将公开您输入文件作为全局范围内的对象导出 - 您可以从那里导出您的回调