diff --git a/lib/ChunkManifestPlugin.js b/lib/ChunkManifestPlugin.js
index 4da72d0..2fd0d7f 100644
--- a/lib/ChunkManifestPlugin.js
+++ b/lib/ChunkManifestPlugin.js
@@ -1,66 +1,75 @@
var RawSource = require("webpack-core/lib/RawSource");
function ChunkManifestPlugin(options) {
- options = options || {};
- this.manifestFilename = options.filename || "manifest.json";
- this.manifestVariable = options.manifestVariable || "webpackManifest";
- this.inlineManifest = options.inlineManifest || false;
+ options = options || {};
+ this.manifestFilename = options.filename || "manifest.json";
+ this.manifestVariable = options.manifestVariable || "webpackManifest";
+ this.inlineManifest = options.inlineManifest || false;
}
module.exports = ChunkManifestPlugin;
ChunkManifestPlugin.prototype.constructor = ChunkManifestPlugin;
ChunkManifestPlugin.prototype.apply = function(compiler) {
- var manifestFilename = this.manifestFilename;
- var manifestVariable = this.manifestVariable;
- var inlineManifest = this.inlineManifest;
- var oldChunkFilename;
- var chunkManifest;
+ var manifestFilename = this.manifestFilename;
+ var manifestVariable = this.manifestVariable;
+ var inlineManifest = this.inlineManifest;
+ var oldChunkFilename;
+ var chunkManifest;
- compiler.plugin("this-compilation", function(compilation) {
- var mainTemplate = compilation.mainTemplate;
- mainTemplate.plugin("require-ensure", function(_, chunk, hash) {
- var filename = this.outputOptions.chunkFilename || this.outputOptions.filename;
+ compiler.plugin("this-compilation", function(compilation) {
+ var mainTemplate = compilation.mainTemplate;
+ mainTemplate.plugin("require-ensure", function(_, chunk, hash) {
- if (filename) {
- chunkManifest = [chunk].reduce(function registerChunk(manifest, c) {
- if(c.id in manifest) return manifest;
- var hasRuntime = typeof c.hasRuntime === 'function' ? c.hasRuntime() : c.entry;
- if(hasRuntime) {
- manifest[c.id] = undefined;
- } else {
- manifest[c.id] = mainTemplate.applyPluginsWaterfall("asset-path", filename, {
- hash: hash,
- chunk: c
- });
- }
- return c.chunks.reduce(registerChunk, manifest);
- }, {});
- oldChunkFilename = this.outputOptions.chunkFilename;
- this.outputOptions.chunkFilename = "__CHUNK_MANIFEST__";
- // mark as asset for emitting
- compilation.assets[manifestFilename] = new RawSource(JSON.stringify(chunkManifest));
- chunk.files.push(manifestFilename);
- }
+ var filename = compilation.outputOptions.chunkFilename || compilation.outputOptions.filename;
+ if (filename) {
+ chunkManifest = [chunk].reduce(function registerChunk(manifest, c) {
+ if(c.id in manifest) return manifest;
+ var hasRuntime = typeof c.hasRuntime === 'function' ? c.hasRuntime() : c.entry;
+ if(hasRuntime) {
+ manifest[c.id] = undefined;
+ } else {
+ // In webpack 4 the plugin interface changed, so check for available fns
+ if (compilation.mainTemplate.getAssetPath) {
+ manifest[c.id] = compilation.mainTemplate.hooks.assetPath.call(filename, {
+ hash: hash,
+ chunk: c
+ })
+ } else {
+ manifest[c.id] = mainTemplate.applyPluginsWaterfall("asset-path", filename, {
+ hash: hash,
+ chunk: c
+ });
+ }
+ }
+ return compilation.chunks.reduce(registerChunk, manifest);
+ }, {});
+ oldChunkFilename = compilation.outputOptions.chunkFilename;
+ compilation.outputOptions.chunkFilename = "__CHUNK_MANIFEST__";
+ // mark as asset for emitting
+ compilation.assets[manifestFilename] = new RawSource(JSON.stringify(chunkManifest));
+ chunk.files.push(manifestFilename);
+ }
- return _;
+ return _;
+ });
});
- });
- compiler.plugin("compilation", function(compilation) {
- compilation.mainTemplate.plugin("require-ensure", function(_, chunk, hash, chunkIdVar) {
- if (oldChunkFilename) {
- this.outputOptions.chunkFilename = oldChunkFilename;
- }
+ compiler.plugin("compilation", function(compilation) {
+ compilation.mainTemplate.plugin("require-ensure", function(_, chunk, hash, chunkIdVar) {
+ if (oldChunkFilename) {
+ compilation.outputOptions.chunkFilename = oldChunkFilename;
+ }
- return _.replace("\"__CHUNK_MANIFEST__\"",
- "window[\"" + manifestVariable + "\"][" + chunkIdVar + "]");
- });
+ return _.replace("\"__CHUNK_MANIFEST__\"",
+ "window[\"" + manifestVariable + "\"][" + chunkIdVar + "]").replace('jsonpScriptSrc(chunkId)',
+ "__webpack_require__.p + window[\"" + manifestVariable + "\"][" + chunkIdVar + "]");
+ });
- if (inlineManifest){
- compilation.plugin("html-webpack-plugin-before-html-generation", function (data, callback) {
- var manifestHtml = "";
- callback(null, data.assets[manifestVariable] = manifestHtml);
- });
- }
- });
+ if (inlineManifest){
+ compilation.plugin("html-webpack-plugin-before-html-generation", function (data, callback) {
+ var manifestHtml = "";
+ callback(null, data.assets[manifestVariable] = manifestHtml);
+ });
+ }
+ });
};