2016-05-02 2 views
2

В примерах WebPack, в частностивыбора дллы WebPack расслоение с помощью режима осциллографа

Мы можем создать пакет, который зависит от уже предварительно в комплекте библиотеки. Примеры под рукой работают так, как должны. То есть мы сначала переместим в 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') в примере работ. Похоже, что веб-пакет с трудом вычисляет его узлы_модулей.

+0

Работали ли вы это? Я не понимаю, что вы имеете в виду ./a? – Cameron

ответ

1

У меня была аналогичная проблема при создании моей DLL с использованием модуля из NPM. Исправление для меня состояло в том, чтобы ссылаться на полный путь из манифеста, а не только на имя модуля.

index.js - модуль с использованием DLL

var angular = require('alpha/node_modules/angular-wrapper/lib/index'); require('alpha/node_modules/angular-ui-router/release/angular-ui-router');

делает требуют в проекте вы используете DLL выглядеть немного некрасиво, но это работает.

webpack.conf - модуль с помощью DLL

new webpack.DllReferencePlugin({ scope: 'alpha', context: path.join(__dirname,'./node_modules/@company/ng1dll/dist/'), manifest: require('./node_modules/@company/ng1dll/dist/angular-manifest.json') })

Примечания: Я загрузка моего модуля через отдельный пакет НОГО.

webpack.конф - создание DLL

module.exports = { 
    entry: { 
     beta: ["./beta", "./b"], 
     angular: ['angular-wrapper','angular-ui-router'] 
    }, 
    output: { 
     path: path.join(__dirname, "dist"), 
     filename: "[name].js", 
     library: "[name]_lib" 

    }, 
    plugins: [ 
     new webpack.DllPlugin({ 
      path: path.join(__dirname, "dist", "[name]-manifest.json"), 
      name: "[name]_lib" 
     }) 
    ] 
} 

manifest.json

{ 
    "name": "angular_lib", 
    "content": { 
    "./node_modules/angular-wrapper/lib/index.js": 1, 
    "./node_modules/angular-wrapper/node_modules/angular/index.js": 2, 
    "./node_modules/angular-wrapper/node_modules/angular/angular.js": 3, 
    "./node_modules/angular-ui-router/release/angular-ui-router.js": 4 
    } 
} 
Смежные вопросы