From da6cbe212aec8bcd2f55f4b0d9c4c92792266786 Mon Sep 17 00:00:00 2001 From: lmk123 Date: Mon, 12 Dec 2016 03:07:12 +0800 Subject: [PATCH] use HashedModuleIdsPlugin to keep module ids consistent --- template/build/HashedModuleIdsPlugin.js | 35 +++++++++++++++++++++++++ template/build/webpack.prod.conf.js | 3 ++- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 template/build/HashedModuleIdsPlugin.js diff --git a/template/build/HashedModuleIdsPlugin.js b/template/build/HashedModuleIdsPlugin.js new file mode 100644 index 0000000000..5e82971818 --- /dev/null +++ b/template/build/HashedModuleIdsPlugin.js @@ -0,0 +1,35 @@ +// from https://github.com/webpack/webpack/blob/master/lib/HashedModuleIdsPlugin.js +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +function HashedModuleIdsPlugin(options) { + this.options = options || {}; + this.options.hashFunction = this.options.hashFunction || "md5"; + this.options.hashDigest = this.options.hashDigest || "base64"; + this.options.hashDigestLength = this.options.hashDigestLength || 4; +} +module.exports = HashedModuleIdsPlugin; +HashedModuleIdsPlugin.prototype.apply = function(compiler) { + var options = this.options; + compiler.plugin("compilation", function(compilation) { + var usedIds = {}; + compilation.plugin("before-module-ids", function(modules) { + modules.forEach(function(module) { + if(module.id === null && module.libIdent) { + var id = module.libIdent({ + context: this.options.context || compiler.options.context + }); + var hash = require("crypto").createHash(options.hashFunction); + hash.update(id); + id = hash.digest(options.hashDigest); + var len = options.hashDigestLength; + while(usedIds[id.substr(0, len)]) + len++; + module.id = id.substr(0, len); + usedIds[module.id] = true; + } + }, this); + }.bind(this)); + }.bind(this)); +}; diff --git a/template/build/webpack.prod.conf.js b/template/build/webpack.prod.conf.js index c0f9d7ecbb..cc87bc7232 100644 --- a/template/build/webpack.prod.conf.js +++ b/template/build/webpack.prod.conf.js @@ -6,6 +6,7 @@ var merge = require('webpack-merge') var baseWebpackConfig = require('./webpack.base.conf') var ExtractTextPlugin = require('extract-text-webpack-plugin') var HtmlWebpackPlugin = require('html-webpack-plugin') +var HashedModuleIdsPlugin = require('./HashedModuleIdsPlugin') var env = {{#if_or unit e2e}}process.env.NODE_ENV === 'testing' ? require('../config/test.env') : {{/if_or}}config.build.env @@ -36,7 +37,7 @@ var webpackConfig = merge(baseWebpackConfig, { warnings: false } }), - new webpack.optimize.OccurrenceOrderPlugin(), + new HashedModuleIdsPlugin(), // extract css into its own file new ExtractTextPlugin(utils.assetsPath('css/[name].[contenthash].css')), // generate dist index.html with correct asset hash for caching.