new webpack.HashedModuleIdsPlugin()这个到底是干啥的(webpack2)?

假如配置文件是这样的:

    //入口文件
    entry: {
        index: './src/js/entry1.js',
        about: './src/js/entry2.js',
        vendor: ['./src/js/content/a.js']
    },
    //输出目录
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'js/[name]-[chunkhash:6].js',
        chunkFilename: 'js/[name]-[chunkhash:6].js',
        publicPath: '/dist/'
    },

还分离了css并抽离公共js/CSS部分

    plugins: [
        new webpack.optimize.CommonsChunkPlugin({
            name: 'vendor'
        }),
        new ExtractTextPlugin('css/[name]-[contenthash:6].css'),
        new webpack.HashedModuleIdsPlugin()
    ]

然后先打包一次,出现了一个dist文件夹

-dist
  -css
    -index-hash6.css
    -about-hash6.css
    -vendor-hash6.css
  -js
    -index-hash6.js
    -about-hash6.js
    -vendor-hash6.js

现在修改一下entry1.js文件,再打包
发现得到2个新文件:

    -index-hash6(被改变).js
    -vendor-hash6(被改变).js

发现vendor.js的hash还是跟着引入它的entry1,js文件变化了

再修改css文件,发现引入css文件的js的hash并没有改变,只有被修改的css的hash变化了,这个倒是和webpack1不同了。。但是这个不需要new webpack.HashedModuleIdsPlugin()也能实现。

看打包后的代码,变化就是:

__webpack_require__(0);

__webpack_require__(3);

这些chunkID变成了英文字母

__webpack_require__("jcZh");

__webpack_require__("A0gR");

所以new webpack.HashedModuleIdsPlugin()到底是干啥用的?

阅读 16.4k
2 个回答

现在改成这样。。vendor的hash是不会随entry1.js变动了,但是manifest.js又跟着变了。。

        new webpack.optimize.CommonsChunkPlugin({
            names: ['vendor', 'manifest'],
            minChunks: Infinity
        }),

虽然manifest并不需要替换了。。但是每次都生成一个新的manifest好多余啊。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题