Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在React/Webpack中创建全局变量_Javascript_Reactjs_Webpack - Fatal编程技术网

Javascript 在React/Webpack中创建全局变量

Javascript 在React/Webpack中创建全局变量,javascript,reactjs,webpack,Javascript,Reactjs,Webpack,我有一个需要加载的外部库,可以在我的应用程序中引用。这个库在NPM上不可用,所以我不能像在其他插件上那样在我的应用程序顶部导入它。在搜索了最好的解决方法之后,似乎在webpack中创建一个全局变量是访问这个库的最好方法,但是我在网上找到的有限文档不是很清楚。以下是我所做的: 在我的webpack.config文件中,我在中添加了以下行: new webpack.ProvidePlugin({ MarketingCloud: "../src/scripts/marketing-cloud-

我有一个需要加载的外部库,可以在我的应用程序中引用。这个库在NPM上不可用,所以我不能像在其他插件上那样在我的应用程序顶部导入它。在搜索了最好的解决方法之后,似乎在webpack中创建一个全局变量是访问这个库的最好方法,但是我在网上找到的有限文档不是很清楚。以下是我所做的:

在我的webpack.config文件中,我在中添加了以下行:

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,如果这是您的意思,但它仍然不起作用