diff --git a/index.js b/index.js index 5d6d28d0..a3f9d76e 100644 --- a/index.js +++ b/index.js @@ -7,6 +7,7 @@ const vm = require('vm'); const fs = require('fs'); const _ = require('lodash'); const path = require('path'); +const crypto = require('crypto'); const childCompiler = require('./lib/compiler.js'); const prettyError = require('./lib/errors.js'); const chunkSorter = require('./lib/chunksorter.js'); @@ -324,7 +325,7 @@ class HtmlWebpackPlugin { /* * Pushes the content of the given filename to the compilation assets */ - addFileToAssets (filename, compilation) { + addFileToAssets (filename, compilation, outputName) { filename = path.resolve(compilation.compiler.context, filename); return Promise.all([ fsStatAsync(filename), @@ -338,7 +339,17 @@ class HtmlWebpackPlugin { }) .catch(() => Promise.reject(new Error('HtmlWebpackPlugin: could not load file ' + filename))) .then(results => { - const basename = path.basename(filename); + let basename = path.basename(filename); + if (outputName != null) { + basename = outputName + .replace(/\[contenthash]/gi, () => { + const hash = crypto.createHash('md5'); + hash.update(results.source); + return hash.digest('hex'); + }) + // name without the extension + .replace(/\[name]/gi, () => basename.replace(/\.[^/.]+$/, '')); + } if (compilation.fileDependencies.add) { compilation.fileDependencies.add(filename); } else { diff --git a/spec/BasicSpec.js b/spec/BasicSpec.js index a5b5861a..e6b680ee 100644 --- a/spec/BasicSpec.js +++ b/spec/BasicSpec.js @@ -1748,4 +1748,31 @@ describe('HtmlWebpackPlugin', function () { })] }, [/[\s]*