DllPlugin分别打包了两个插件,DllReferencePlugin单独用没有问题,两个一起用后面一个插件的方法就会找不到

使用webpack的DllPlugin分别打包了两个插件,DllReferencePlugin单独用没有问题,两个一起用后面一个插件的方法就会找不到。

项目目录

-build
-example
    |--example.html
    |--example.js
-dll
    |--dll1.config.js
    |--manifest_dll1.json
    |--dll2.config.js
    |--manifest_dll2.json
-thirdparty
    |--jquery.cookie.min.js
-node_modules
-webpack.config.js

dll1.config.js

var webpack = require('webpack');
var path = require('path');
var glob = require('glob');

var entries = ['jquery',"jquery-ui"];
var jqueryuis = [];
glob.sync("../node_modules/jquery-ui/ui/widgets/*.js").forEach(function (entry) {
    jqueryuis.push("jquery-ui/ui/widgets/"+path.basename(entry));
});
entries = entries.concat(jqueryuis);
module.exports = {
    entry:{
       "dll1":entries
    },
    output: {
        path: 'build',
        filename: '[name]-min.js',
        library: '[name]',
    },
    plugins: [
        new webpack.ProvidePlugin({
                "$": 'jquery',
                "jQuery": 'jquery',
        }),
        new webpack.DllPlugin({
            path: path.resolve( __dirname,'./manifest_[name].json'),
            name: '[name]',
            context: path.resolve(__dirname,"../"),
        })
    ]
};

dll2.config.js

var webpack = require('webpack');
var path = require('path');

var entries = [
    path.resolve( __dirname,'../thirdparty/jquery.cookie.min.js'),
];
module.exports = {
    entry:{
       "dll2":entries
    },
    output: {
        path: 'build',
        filename: '[name]-min.js',
        library: '[name]',
    },
    plugins: [
        new webpack.ProvidePlugin({
                "$": 'jquery',
                "jQuery": 'jquery'
        }),
        new webpack.DllPlugin({
            path: path.resolve( __dirname,'./manifest_[name].json'),
            name: '[name]',
            context: path.resolve(__dirname,"../"),
        })
    ]
};

webpack.config.js

new webpack.DllReferencePlugin({
    context: __dirname,
    manifest: require('./dll/manifest_dll1.json'),
}),
new webpack.DllReferencePlugin({
    context: __dirname,
    manifest: require('./dll/manifest_dll2.json')
}),

example.html

<script src="./dll/dll1-min.js"></script>
<script src="./dll/dll2-min.js"></script>

example.js

require("../thirdparty/jquery.cookie.min.js");
$.cookie("dll","dllall");

报如下错误:

clipboard.png

我发现require("../thirdparty/jquery.cookie.min.js");返回的是一个空的对象。

阅读 6.9k
3 个回答

遇到了类似的问题。发现jQuery和zepto在使用ProvidePlugin和dllplugin时在dll中和config中都写,可以解决。

新手上路,请多包涵

一开始我也引导了这个问题。
随后我查看了官网,DllReferencePlugin是支持多个配置的
DllReferencePlugin 多配置

后面我发现原来在导出自定义的组件库的时候,需要用exports.xxxxx模式导出,具体为什么我也不太懂,我怀疑是不是libraryTarget的原因

虽然没帮到你,但可以考虑一下我上面说的问题是否给了你新的灵感

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进