Javascript 在React/Webpack中创建全局变量
我有一个需要加载的外部库,可以在我的应用程序中引用。这个库在NPM上不可用,所以我不能像在其他插件上那样在我的应用程序顶部导入它。在搜索了最好的解决方法之后,似乎在webpack中创建一个全局变量是访问这个库的最好方法,但是我在网上找到的有限文档不是很清楚。以下是我所做的: 在我的webpack.config文件中,我在中添加了以下行:Javascript 在React/Webpack中创建全局变量,javascript,reactjs,webpack,Javascript,Reactjs,Webpack,我有一个需要加载的外部库,可以在我的应用程序中引用。这个库在NPM上不可用,所以我不能像在其他插件上那样在我的应用程序顶部导入它。在搜索了最好的解决方法之后,似乎在webpack中创建一个全局变量是访问这个库的最好方法,但是我在网上找到的有限文档不是很清楚。以下是我所做的: 在我的webpack.config文件中,我在中添加了以下行: new webpack.ProvidePlugin({ MarketingCloud: "../src/scripts/marketing-cloud-
new webpack.ProvidePlugin({
MarketingCloud: "../src/scripts/marketing-cloud-javascript-sdk/marketing_cloud",
}),
我的理解是,上面这一行将允许我访问此脚本中的函数,因为它现在定义为一个全局变量,但当我尝试在我的一个组件onclick函数中包含它时,我会收到一条MarketingCloud is not defined错误消息。如果我将其更改为window.MarketingCloud,它将显示页面,但onclick函数会给我一个正常的位定义错误
我正在使用使用webpack/babel的CreateReact应用程序样板。如果有帮助,下面是我试图添加的文件的内容,顶部的import jquery是我添加的,用于删除一些jquery未定义的错误:
import {$, jQuery} from 'jquery';
(function($) {
window.MarketingCloud = {
env: {},
wsse: new Wsse(),
/** Make the api request */
/* callback should follow standard jQuery request format:
* function callback(data)
*/
makeRequest: function (username, secret, method, params, endpoint, callback)
{
var headers = MarketingCloud.wsse.generateAuth(username, secret);
var url = 'https://'+endpoint+'/admin/1.4/rest/?method='+method;
$.ajax(url, {
type:'POST',
data: params,
complete: callback,
dataType: "json",
headers: {
'X-WSSE': headers['X-WSSE']
}
});
}
};
})(jQuery);
非常感谢您的帮助 不要尝试将其附加到窗口对象-
而是导出默认的MarketingCloud
。引用网页文档(我的重点):
自动加载模块。每当在模块中遇到作为自由变量的标识符时,就会自动加载该模块,该标识符将填充加载模块的导出(属性的),以支持命名导出
它应该可以工作,但从理论上讲,您可以更改导出此处生成的代码的代码,然后您可以在任何地方导入它,并使其与捆绑包一起工作,等等。我在marketing_cloud文件的底部添加了导出默认MarketingCloud,如果这是您的意思,但它仍然不起作用