在 webpack 示例中,特别是
- https://github.com/webpack/webpack/tree/master/examples/dll
- https://github.com/webpack/webpack/tree/master/examples/dll-user
我们可以创建一个依赖于已经预先捆绑的库的捆绑包。手头的例子可以正常工作。也就是说,我们首先导航到examples/dll
并运行node build.js
以创建库。然后我们导航到examples/dll-user
并运行node build.js
以创建引用先前捆绑的库的最终捆绑包。
我的问题如下。假设examples/dll
我们将配置文件修改为如下所示:
var path = require("path");
var webpack = require("../../");
module.exports = {
entry: {
alpha: ["./alpha", "./a", "module"],
beta: ["./beta", "./b", "module"]
},
output: {
path: path.join(__dirname, "js"),
filename: "MyDll.[name].js",
library: "[name]_[hash]"
},
plugins: [
new webpack.DllPlugin({
path: path.join(__dirname, "js", "[name]-manifest.json"),
name: "[name]_[hash]"
})
]
};
也就是我们添加module
到beta
dll中。现在我们必须拥有module
. 让我们编译 dll 并继续dll-user
举例。在这里,我们想做的是制作一个捆绑包,我们可以从中选择将提供的库module
。让我们尝试在示例中再添加一行
console.log(require("../dll/alpha"));
console.log(require("../dll/a"));
console.log(require("beta/beta"));
console.log(require("beta/b"));
console.log(require("module"));
console.log(require("beta/module"));
在这种情况下,我希望能够使用module
驻留在beta
dll 中的那个。不幸的是,我并不幸运。这是我尝试后得到的输出:
jmlopez in ~/Downloads/webpack-master/examples/dll-user$ node build.js
{ [Error: Command failed: /bin/sh -c node ../../bin/webpack.js --display-reasons --display-chunks --display-modules --display-origins --output-public-path "js/" -p ./example.js js/output.js
]
killed: false,
code: 2,
signal: null,
cmd: '/bin/sh -c node ../../bin/webpack.js --display-reasons --display-chunks --display-modules --display-origins --output-public-path "js/" -p ./example.js js/output.js' }
Hash: bd42dda7e56ebfd7cd32
Version: webpack 2.1.0-beta.6
Time: 68ms
Asset Size Chunks Chunk Names
output.js 4.26 kB 0 [emitted] main
chunk {0} output.js (main) 504 bytes [rendered]
> main [7] ./example.js
[7] ./example.js 210 bytes {0} [built] [1 error]
+ 7 hidden modules
ERROR in ./example.js
Module not found: Error: Can't resolve 'beta/module' in '/Users/jmlopez/Downloads/webpack-master/examples/dll-user'
@ ./example.js 8:12-34
{ [Error: Command failed: /bin/sh -c node ../../bin/webpack.js --display-reasons --display-chunks --display-modules --display-origins --output-public-path "js/" --output-pathinfo ./example.js js/output.js
]
killed: false,
code: 2,
signal: null,
cmd: '/bin/sh -c node ../../bin/webpack.js --display-reasons --display-chunks --display-modules --display-origins --output-public-path "js/" --output-pathinfo ./example.js js/output.js' }
有没有办法指定捆绑包应该使用的库?我认为scope
选项DllReferencePlugin
可以解决问题,但似乎并非如此。
编辑:请注意,添加./a
到 beta dll,然后require('beta/a')
在示例中使用。似乎 webpack 很难弄清楚 node_modules。