Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.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 有没有办法用Webpack在异步块中用全局变量替换所需的包?_Javascript_Jquery_Webpack_Dependencies_Chunks - Fatal编程技术网

Javascript 有没有办法用Webpack在异步块中用全局变量替换所需的包?

Javascript 有没有办法用Webpack在异步块中用全局变量替换所需的包?,javascript,jquery,webpack,dependencies,chunks,Javascript,Jquery,Webpack,Dependencies,Chunks,我想要什么: 所有要求jQuery包含它的JavaScript/TypeScript文件,但所有要求jQuery不包含jQuery的异步块都使用window.jQuery变量 问题: 问题是:有一个jQuery插件(外部代码)作为块加载,需要在其代码(UMD)中使用jQuery,因此块本身在Webpack构建后包含自己的jQuery…:( 上下文: 我有一个主文件,它导入jQuery并使它作为一个全局窗口在遗留代码中可用。然后这个主文件将异步加载一些块 其中一个区块是一个外部包(因此我无法更改代

我想要什么:

所有要求jQuery包含它的JavaScript/TypeScript文件,但所有要求jQuery不包含jQuery的异步块都使用
window.jQuery
变量

问题:

问题是:有一个jQuery插件(外部代码)作为块加载,需要在其代码(UMD)中使用jQuery,因此块本身在Webpack构建后包含自己的jQuery…:(

上下文:

我有一个主文件,它导入jQuery并使它作为一个全局窗口在遗留代码中可用。然后这个主文件将异步加载一些块

其中一个区块是一个外部包(因此我无法更改代码),它是一个用UMD编写的jQuery插件

看起来有点像:

// main.js

import $ from 'jquery';

window.$ = window.jQuery = $; // In reality with expose-loader.

import(/* webpackChunkName: jquery.plugin */ 'jquery-plugin').then(() => {
    $('element').plugin();
});
插件的UMD如下所示:

// jquery-plugin.js

(function (factory) {
    'use strict';
    if (typeof define === 'function' && define.amd) {
        // Webpack gets here by default.
        define(['jquery'], factory);
    } else if (typeof exports === 'object' && typeof require === 'function') {
        // Webpack gets here if I disable AMD in Webpack config.
        factory(require('jquery'));
    } else {
        // I would like Webpack to get here.
        factory(jQuery); // Browser global
    }
}(function($) { /* plugin code */ })
我的尝试:

我看到了
webpack.ProvidePlugin
,但它似乎只适用于所有文件,因此我的main.js将不包含jQuery,这将是一个大问题


使用
webpack.IgnorePlugin
忽略特定库中的jQuery,但会导致模块未找到错误,因为该文件不再包含jQuery,但jQuery插件代码没有更改,仍然需要jQuery

// webpack.config.js

{
    plugins: [
        new webpack.IgnorePlugin(/^jquery$/, /node_modules\/jquery-plugin/),
    ]
}
jquery.autocomplete.js:19未捕获(承诺中)错误:找不到 模块“jquery”


据我所知,我不能使用
externals
作为对象,因为它对所有文件都是外部的。因此我尝试使用函数syntax,但没有成功。我觉得这可能是解决方案,但我缺少一些东西:

// webpack.config.js

{
    externals: [
        function(context, request, callback) {
            if (/^jquery$/.test(request) && /node_modules\/jquery-plugin/.test(context)){
                return callback(null, 'amd ' + request);
            }
            callback();
        },
    ],
}
外部jquery:1未捕获(承诺中)引用错误:未定义网页外部模块638


也许有一些splitChunk选项可以处理类似的事情


IDK:'(

非常欢迎您的帮助^^'

谢谢

海默斯