webpack缩小HtmlWebpackPlugin

时间:2018-09-18 07:40:29

标签: javascript webpack minify html-webpack-plugin


我正在尝试使用带有HtmlWebpackPlugin插件的Webpack来缩小我的html文件。我设法将index.html文件放入我的dist加载程序中,但是在缩小文件时遇到了一些麻烦。

dist/
node_modules/
src/
   ejs/
   js/
   css/
server.js
webpack.config.js
package.js

webpack.config.js:

var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {

    entry: './src/js/index.js',

    devtool: 'source-map',

    output: {
        publicPath: '/dist/'
    },

    module: {
        rules: [
            {
                test: /\.ejs$/,
                use: ['ejs-loader']
            },
            {
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    use: [{
                            loader: 'css-loader',
                            options: {
                                url: false,
                                minimize: true,
                                sourceMap: true
                            }
                        }]
                })
            }
        ]
    },

    plugins: [
        new HtmlWebpackPlugin({
            template: './src/ejs/index.ejs',
            minify: true
        }),
        new ExtractTextPlugin({
            filename: 'main_style.css'
        })
    ]
}

3 个答案:

答案 0 :(得分:2)

不确定确切要面对的问题是什么,但是您可以尝试在minify属性(而不是布尔值)中传递显式参数。 例如,要删除空格,请尝试以下操作:

尝试:

new HtmlWebpackPlugin({
    template: './src/ejs/index.ejs',
    filename: 'index.ejs',
    minify: {
        collapseWhitespace: true
    }
})

这对我有用。

有关选项的完整列表,请检查documentation

答案 1 :(得分:0)

我遇到了同样的问题,minify: true选项不起作用。 根据文档,它应该可以工作。这时,我添加了默认选项以产生相同的结果。

如果将minify选项设置为true(当webpack的模式为“生产”时为默认值),则将使用html-minifier-terser和以下选项来缩小生成的HTML:

{
  collapseWhitespace: true,
  removeComments: true,
  removeRedundantAttributes: true,
  removeScriptTypeAttributes: true,
  removeStyleLinkTypeAttributes: true,
  useShortDoctype: true
}

答案 2 :(得分:0)

此配置适用于我的项目:

new HtmlWebpackPlugin({
          inject: "body",
          hash: true,
          template: './src/ejs/index.ejs',
          filename: 'index.ejs',
          minify: {
            html5                          : true,
            collapseWhitespace             : true,
            minifyCSS                      : true,
            minifyJS                       : true,
            minifyURLs                     : false,
            removeAttributeQuotes          : true,
            removeComments                 : true, // false for Vue SSR to find app placeholder
            removeEmptyAttributes          : true,
            removeOptionalTags             : true,
            removeRedundantAttributes      : true,
            removeScriptTypeAttributes     : true,
            removeStyleLinkTypeAttributese : true,
            useShortDoctype                : true
          },
        }),