В примерах WebPack, в частностивыбора дллы 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
к DLL 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
, который находится в библиотеке DLL beta
. К сожалению, мне не повезло. Это выход я получаю после попытки его:
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
сделала бы трюк, но, похоже, это не так.
EDIT: Обратите внимание, что добавление ./a
к DLL бета, а затем с помощью require('beta/a')
в примере работ. Похоже, что веб-пакет с трудом вычисляет его узлы_модулей.
Работали ли вы это? Я не понимаю, что вы имеете в виду ./a? – Cameron