1. const { resolve } = require('path');
    2. const HtmlWebpackPlugin = require('html-webpack-plugin');
    3. const TerserWebpackPlugin = require('terser-webpack-plugin')
    4. module.exports = {
    5. entry: './src/js/index.js',
    6. output: {
    7. filename: 'js/[name].[contenthash:10].js',
    8. path: resolve(__dirname, 'build'),
    9. },
    10. module: {
    11. rules: [
    12. {
    13. test: /\.css$/,
    14. use: ['style-loader', 'css-loader']
    15. }
    16. ]
    17. },
    18. plugins: [new HtmlWebpackPlugin()],
    19. mode: 'production',
    20. resolve: {
    21. alias: {
    22. $css: resolve(__dirname, 'src/css')
    23. },
    24. extensions: ['.js', '.json', '.jsx', '.css'],
    25. modules: [resolve(__dirname, '../../node_modules'), 'node_modules']
    26. },
    27. optimization: {
    28. splitChunks: {
    29. chunks: 'all'
    30. // 默认值,可以不写~
    31. /* minSize: 30 * 1024, // 分割的chunk最小为30kb
    32. maxSiza: 0, // 最大没有限制
    33. minChunks: 1, // 要提取的chunk最少被引用1次
    34. maxAsyncRequests: 5, // 按需加载时并行加载的文件的最大数量
    35. maxInitialRequests: 3, // 入口js文件最大并行请求数量
    36. automaticNameDelimiter: '~', // 名称连接符
    37. name: true, // 可以使用命名规则
    38. cacheGroups: {
    39. // 分割chunk的组
    40. // node_modules文件会被打包到 vendors 组的chunk中。--> vendors~xxx.js
    41. // 满足上面的公共规则,如:大小超过30kb,至少被引用一次。
    42. vendors: {
    43. test: /[\\/]node_modules[\\/]/,
    44. // 优先级
    45. priority: -10
    46. },
    47. default: {
    48. // 要提取的chunk最少被引用2次
    49. minChunks: 2,
    50. // 优先级
    51. priority: -20,
    52. // 如果当前要打包的模块,和之前已经被提取的模块是同一个,就会复用,而不是重新打包模块
    53. reuseExistingChunk: true
    54. }
    55. }*/
    56. },
    57. // 将当前模块的记录其他模块的hash单独打包为一个文件 runtime
    58. // 解决:修改a文件导致b文件的contenthash变化
    59. runtimeChunk: {
    60. name: entrypoint => `runtime-${entrypoint.name}`
    61. },
    62. minimizer: [
    63. // 配置生产环境的压缩方案:js和css
    64. new TerserWebpackPlugin({
    65. // 开启缓存
    66. cache: true,
    67. // 开启多进程打包
    68. parallel: true,
    69. // 启动source-map
    70. sourceMap: true
    71. })
    72. ]
    73. }
    74. };

    1、当没有runtimeChunk时,
    index.js引入a.js,导致问题:修改a文件导致b文件的contenthash变化
    image.png
    2、有runtimeChunk时,
    image.png