【问题标题】:Why is my Webpack bundle so large?为什么我的 Webpack 包这么大?
【发布时间】:2016-11-12 06:48:20
【问题描述】:

我正在编写一些使用Moment.jsHandlebars 的JavaScript。 Moment.js 应该是 30 KB 的 gzip 文件,而 Handlebars 应该是小于 10 KB 的 gzip 文件。但是当我使用 Webpack 打包我的代码时,我得到了一个 271 KB 的文件!

我安装了 webpack-bundle-size-analyzer 进行调查,发现文件比预期大得多:

$ webpack --json | webpack-bundle-size-analyzer
moment: 454.54 KB (74.1%)
handlebars: 94.39 KB (15.4%)
twitter-text: 62.3 KB (10.2%)
<self>: 1.94 KB (0.317%)

我感觉我正在做的事情会导致加载很多不必要的东西,因为我期望最终文件大小

ma​​in.js

var template = require('./template.handlebars')
var Handlebars = require('handlebars/runtime')
var twitter = require('twitter-text')
var moment = require('moment')

webpack.config.js

var path = require('path')
var webpack = require('webpack')

module.exports = {
  entry: './src/main.js',

  output: {
    path: path.resolve(__dirname, './dist'),
    publicPath: '/dist/',
    filename: 'bundle.min.js'
  },

  resolveLoader: {
    root: path.join(__dirname, 'node_modules')
  },

  module: {
    loaders: [
      {
        test: /\.handlebars$/,
        loader: 'handlebars-loader'
      }
    ]
  },

  plugins: [
    new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false
      }
    })
  ]
}

【问题讨论】:

  • 您是为 prod 还是 dev 配置?
  • 我通过从 moment 切换到 date-fns 节省了相当多的空间。不使用车把我也可以节省一点空间。

标签: javascript handlebars.js webpack momentjs


【解决方案1】:

8 月 10 日更新

您可以参考 github/moment 上的 issue。基本上,您可以消除所有其他不需要的语言环境。

从 cmets 中提取:

plugins: [
    new webpack.ContextReplacementPlugin(/moment[\\\/]locale$/, /^\.\/(en|zh-tw)$/)
]

我认为 webpack 已经尽力了。查看node_modules/moment/min/中的文件时

你会看到这些:

220K  moment-with-locales.min.js
 57K  moment.min.js

因此,如果您在语言环境中包含时刻,则 2XXKB 是有意义的。要进一步减小尺寸,您可以尝试

  1. 包括没有明确地区设置的时刻

    var moment = require('moment/min/moment.min')
    // if you dun need the locale support
    
  2. 或者您可以尝试使用此插件compression-webpack-plugin 手动使用 gz 压缩您的输出。

【讨论】:

  • 其实,如果你可以访问网络服务器,比如说express,你可以很容易地通过添加app.use(compression({ threshold: 0 }))来进行压缩。这有助于将我的 js 文件从 600kb 压缩到 200kb。 :D
猜你喜欢
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 1970-01-01
相关资源
最近更新 更多