2016-05-01 6 views
1

У меня возникли проблемы с визуализацией того, как я могу использовать DllPlugin/DllReferencePlugin с помощью Webpack, а также используя Grunt для здания. Для тех, у кого нет знаний, DllPlugin создает отдельный пакет, который может использоваться совместно с другими пакетами. Он также создает файл манифеста (важно), чтобы помочь с привязкой. Затем DllReferencePlugin используется другим комплектом при построении для захвата предыдущего пакета DllPlugin Bundle. Для этого требуется файл манифеста, созданный ранее.Grunt, Webpack и DllPlugin

В Grunt для этого потребуется файл манифеста, созданный до того, как хрюкает даже бег, нет? Heres упрощенный пример кода:

webpack.dll.js

// My Dll Bundles, which creates 
// - ./bundles/my_dll.js 
// - ./bundles/my_dll-manifest.json 
module.exports = { 

    entry: { 
     my_dll : './dll.js' 
    }, 
    // where to send final bundle 
    output: { 
     path: './bundles', 
     filename: "[name].js" 
    }, 
    // CREATES THE MANIFEST 
    plugins: [ 
     new webpack.DllPlugin({ 
      path: "./bundles/[name]-manifest.json", 
      name: "[name]_lib" 
     }) 
    ] 
}; 

webpack.app.js

// My Referencing Bundle, which includes 
// - ./bundles/app.js 
module.exports = { 

    entry: { 
     my_app : './app.js' 
    }, 
    // where to send final bundle 
    output: { 
     path: './bundles', 
     filename: "[name].js" 
    }, 
    // SETS UP THE REFERENCE TO THE DLL 
    plugins: [ 
     new webpack.DllReferencePlugin({ 
      context: '.', 
      // IMPORTANT LINE, AND WHERE EVERYTHING SEEMS TO FAIL 
      manifest: require('./bundles/my_dll-manifest.json') 
     }) 
    ] 
}; 

Если вы посмотрите на второй секции, webpack.app .js, я прокомментировал, где все, казалось бы, терпит неудачу. Чтобы работать с DllReferencePlugin, ему нужен файл манифеста из DllPlugin, но в рабочем процессе Grunt grunt загрузит обе эти конфигурации при инициализации самого grunt, из-за чего строка manifest: require('./bundles/my_dll-manifest.json') потерпит неудачу, потому что предыдущий шаг grunt, который строит webpack.dll.js, не завершено, значение манифеста еще не существует.

ответ

1
var path = require("path"); 
var util = require('util') 
var webpack = require("webpack"); 

var MyDllReferencePlugin = function(options){ 
    webpack.DllReferencePlugin.call(this, options); 
} 

MyDllReferencePlugin.prototype.apply = function(compiler) { 
    if (typeof this.options.manifest == 'string') { 
     this.options.manifest = require(this.options.manifest); 
    } 

    webpack.DllReferencePlugin.prototype.apply.call(this, compiler); 
}; 


// My Referencing Bundle, which includes 
// - ./bundles/app.js 
module.exports = { 

    entry: { 
     my_app : './app.js' 
    }, 
    // where to send final bundle 
    output: { 
     path: './bundles', 
     filename: "[name].js" 
    }, 
    // SETS UP THE REFERENCE TO THE DLL 
    plugins: [ 
     new MyDllReferencePlugin({ 
      context: '.', 
      // IMPORTANT LINE, AND WHERE EVERYTHING SEEMS TO FAIL 
      manifest: path.resolve('./bundles/my_dll-manifest.json') 
     }) 
    ] 
}; 
+0

Пожалуйста, старайтесь избегать просто сдачи кода в качестве ответа и попытаться объяснить, что он делает и почему. Ваш код может быть не очевидным для людей, у которых нет соответствующего опыта в кодировании. – Frits

+0

Спасибо! Ты спасатель жизни. – zjm555

Смежные вопросы