webpack 图片压缩不起作用_webpack常用插件,走起~

如果有不了解webpack的同学,可以自行到webpack官网学习基础的配置,这里我们主要一起学习常见的插件应用。

loader用于打包文件,plugins 用于解决一些其他任务,比如去注释等等。

语法:plugins:[plugin1,plugin2,plugin3]

复制代码

数组中的参数要求是插件对象的实例,即必须new,如下:plugins: [

new webpack.optimize.UglifyJsPlugin(),

new HtmlWebpackPlugin({template: './src/index.html'})

]复制代码

1. HTML文件生成插件:html-webpack-plugin

产生背景:多入口时,当你的 index.html 引入多个js,如果这些生成的js名称构成有 [hash] ,那么每次打包后的文件名都是变化的。

作用:HtmlWebpackPlugin 在此可以用于自动重新生成一个index.html或依据模板生成,帮你把所有生产的js文件引入到html中,最终生成到output目录。

安装:

npm install --save-dev html-webpack-plugin复制代码

配置:

//引入

const HtmlWebpackPlugin = require('html-webpack-plugin');

//配置

plugins: [

new HtmlWebpackPlugin()

]复制代码

当然,如上是单个页面的配置,如果需要设置多个页面的配置,需要实例化多个HtmlWebpackPlugin对象,另外我们也可以对其进行参数配置:

const htmlWebPackConfig = {

title: 'Hello Webpack', // 配置模板title

template: '', // 模板来源html文件

filename: 'index.html', // 生成的模板文件名

favicon: '', // 指定页面的图标

hash: true, // 是否生成hash添加在引入文件地址的末尾 默认为true

inject: '', // 引入模板的注入位置 取值有(true/false/body/head)

minify: { // 对生成的html文件进行压缩,默认是false

collapseWhitespace: true, // 是否去除空格

removeAttributeQuotes: true, // 去掉属性引用

caseSensitive: false, // 是否大小写敏感

removeComments: true, // 去掉注释

},

cache: true, // 表示内容变化的时候生成一个新的文件, 默认true

showErrors: true, // 是否将错误信息写在页面, 默认true

chunks: ['index'], // 引入模块,指的是entry中设置的多个js,这里是执行js, 否则引入全部

};复制代码

注意:如上是为了方便表述,横向标写注释,请大家使用的时候使用严谨的json格式哦~

2. 图片压缩插件:imagemin-webpack-plugin

产生背景:图片过大,加载速度慢,浪费存储空间。

作用:批量压缩图片。

安装:

npm install --save-dev imagemin-webpack-plugin复制代码

配置:

//引入插件

var ImageminPlugin = require('imagemin-webpack-plugin').default;

//配置

plugins: [

new ImageminPlugin({

disable: process.env.NODE_ENV !== 'production', // 开发时不启用

pngquant: {//图片质量

quality: '95-100'

}

})

]复制代码

3. 清空文件夹插件:clean-webpack-plugin

产生背景:每次进行打包需要手动清空目标文件夹。

作用:每次打包时先清空output文件夹。

安装:

npm install --save-dev clean-webpack-plugin复制代码

配置:

//引入

const CleanWebpackPlugin = require('clean-webpack-plugin');

//清空dist文件夹

plugins: [

new CleanWebpackPlugin(['dist'])

]复制代码

4. 提供全局变量插件

产生背景:每次进行import引入全局模块,很麻烦。

作用:可以导入到全局,之后不用再在每个页面import。

无需安装:

内置插件: webpack.ProvidePlugin复制代码

配置:

//这些变量不必再import了

new webpack.ProvidePlugin({

jQuery: 'jquery',

React: 'react',

ReactDOM: 'react-dom',

Component: ['react','Component'] // 导出react模块中的Component

})复制代码

5. 公共代码抽取插件

产生背景:CommonsChunkPlugin 已弃用,使用optimization.splitChunks代替,像我们项目中会多次引用到一些公共模块,或者第三方类库,会进行重复打包。

作用:提取被重复引入的文件,单独生成一个或多个文件,这样避免在多入口重复打包文件。

安装:

无需安装,内置复制代码

配置:

optimization: {

//打包 第三方库

//打包 公共文件

splitChunks: {

cacheGroups: {

vendor:{//node_modules内的依赖库

chunks:"all",

test: /[\\/]node_modules[\\/]/,

name:"vendor",

minChunks: 1, //被不同entry引用次数(import),1次的话没必要提取

maxInitialRequests: 5,

minSize: 0,

priority:100,

// enforce: true?

},

common: {// ‘src/js’ 下的js文件

chunks:"all",

test:/[\\/]src[\\/]js[\\/]/,//也可以值文件/[\\/]src[\\/]js[\\/].*\.js/,

name: "common", //生成文件名,依据output规则

minChunks: 2,

maxInitialRequests: 5,

minSize: 0,

priority:1

}

}

}

}复制代码

配合 runtimeChunk 使用:

optimization.runtimeChunk 用来提取 entry chunk 中的 runtime部分函数,形成一个单独的文件,这部分文件不经常变换,方便做缓存。

runtimeChunk将入口提取出来,这样入口文件可以很快加载,并且当哪里有改动的时候,只有改动的地方和这个文件有变化。

配置:

runtimeChunk: {

name: 'manifest'

}复制代码

6. css提取插件:mini-css-extract-plugin (生产模式)

产生背景:在进行打包时,css代码会打包到JS中,不利于文件缓存。

作用:依据每个entry生成单个css文件(将css从js中提取出来)。

安装:

npm install --save-dev mini-css-extract-plugin复制代码

配置:

const MiniCssExtractPlugin = require('mini-css-extract-plugin');

plugins: [

new MiniCssExtractPlugin(),

]复制代码

注意:不要在开发模式使用,因为不支持热加载

如果单入口,不需要这个

7. css 去除无用的样式

产生背景:编写的css可能出现冗余情况。

作用:去除冗余的css代码。

安装:

npm install --save-dev purifycss-webpack复制代码

配置:

const purifycssWebpack = require('purifycss-webpack');

const glob = require('glob');

// Make sure this is after ExtractTextPlugin!

new purifycssWebpack({

paths: glob.sync(path.resolve('./src/*.html'))

}),复制代码

注意:html文件生成 > css提取 > css摇树

8. 文件复制插件:copy-webpack-plugin

产生背景:一些静态资源(图片、字体等),在编译时,需要拷贝到输出文件夹。

作用:用来复制文件或文件夹。

安装:

npm install --save-dev copy-webpack-plugin复制代码

配置:

// 引入

const CopyPlugin = require('copy-webpack-plugin');

module.exports = {

plugins: [

new CopyPlugin([

{ from: 'source', to: 'dist' },

{ from: 'other/xx.js', to: 'dist' },

]),

],

};复制代码

以上,是我比较常用的webpack插件,详细的例子,可以参见我的代码哦~

大前端,我们一起加油,感谢大家的观看!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值