Webpack 打包文件

自动化构建工具

1.将一些浏览器不支持代码(比如es6,css预编译)编译为浏览器可识别的代码

2.打包压缩js,css代码

3.打包压缩image代码

4打包压缩html代码

5.自动补全css3属性前缀等....

自动化构建工具

webpack (最火 vue脚手架,react脚手架都是基于webpack构建的) gulp grunt

一,webpack

1.安装

cnpm  install -g webpack webpack-cli

2.使用

执行webpack命令,webpack工具就会进行打包编译默认情况下webpack会打包执行webpack命令的光标所在目录为标准,打包src目录下的index.js(作为入口文件),最终打包完毕自动生成dist目录下的main.js,我们在页面中引入的是打包后的main.js

默认情况下webpack只可以打包js

3.语法

设置打包环境

webpack --mode=development :开发环境打包,代码不会压缩

webpack  --mode=production   :生产环境打包,代码会压缩(默认)

二.package.json

包说明管理文件,我们项目依赖的包名字全部存在该文件

1生成

在项目目录下执行npm init, 一路回车

2属性说明

1)添加执行命令

"script":{"build":"webpack --mode=development"}

我们通过运行npm run build ,实际上就是运行package.json中的script内命令

2)添加依赖

"devDependencies":{"webpack":"^5.1.3"}放置打包编译依赖的包

"devpendencies":{"webpack":"^5.1.3"}放置项目依赖的包

安装包需要添加 --save-dev  -D

例如 cnpm install webpack   --save dev

        cnpm install   webpack-cli  -development  安装包是需要添加 --save 

例如  cnpm install jquery --save

三.webpack.config.js

webpack配置文件,执行webpack命令时,webpack会自动跟据该文件的配置进行相关的打包编译操作

1.配置文件必须叫webpack.config.js如果需要修改webpack配置文件名称运行时需要执行config文件 webpack --config  webpack.config.my.js

2.搭建本地服务器(webpac-dev-server)用于搭建本地服务器,作用可以自动打开浏览器,监听代码改变自动编译,浏览器热更新等

全局安装cnpm install webpack-dev-server -g

查询是否安装成功 webpack-dev-server  --version

运行webpack-dev-server

SPA

webpack.config.js

devServer:{

prot:3007,端口

open:true,自动打开默认浏览器

progress:true设置显示打包过程进度

}

注意:通过webpack-dev-server运行项目,它不会打包生成文件但其实维护了模拟文件,模拟文件可以直接浏览器访问

3.插件(plugins)

loder被用于转化某些类型模块

1)html-webpack-plugin处理html文件,将处理后的html内部自动引入相关打包文件的js和css压缩html

new HtmlWebpackPlugin({

template:'./index.html',模板文件

filename:'index.html'.最后生成的文件

title:'hello world app',指定页面标题

favicon:'./dist/favicon.ico',

minfy:{

removeCommnets:true ,移除html中的注释

collapseWhitespace:true,清除html中标注

minifyCSS:true压缩内联css

}

})

4 loader

loader 让webpack 能够去处理那些非JavaScript 文件(webpack自身 只理解 JavaScript).loader 可以将所有类型的文件转化为webpack 能够处理的有效模块,然后就可以利用webpack的打包能力,对文件进行处理

1)编译css

安装loader :style-loader  css-loader

webpack.config.js配置

{

test:/\'css$/,注意:style-loader一定要放前面

use:[

'style-loader',在页面中生成style.

'css-loader',将css代码整合到style内

]

}

2)编译sass/less

安装loader:sass-loader  node-sass less-loader less 

webpack.config.js 配置

{

test:/\.(c|sc)ss$/,

use:[

'style-loader',

'css-loader',

'sass-loader'

]

}

3)自动补全css3属性前缀(-webkit- -moz-)

安装 loader :postcss-loader 3.0.0

安装插件:autoprefixer       9.8.2

配置

rules:[

test:/\.(c|sc)ss$/,

use:[

'style-loader',

'css-loader',

'sass-loader',

{

loader:'pistcss-loader',

options:{

plugins:[require('autoprefixer')]

}

}

]

}

]

package.json配置

"browserslist":[

">02.%",

"last 10 versions"

]

4)抽取css文件

默认cssb被编译在js中的,如果将css 内容单独收取css文件

安装插件 mini-css-extract-plugin 配置

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

plugins:[

new MiniCssExtractPlugin({

将css内容单独抽取成css 文件

filename:'css/main.css'

})

]

rules:[

{

text:/\.(c|sc)ss$/,

use:[

MiniCssExtractPlugin.loader,

'style-loader',

'css-loader',

'sass-loader'.

处理sass语法

{

loader:'postcss-loader',

options:{

plugins:[require('autoprefixer)]

}

]

}

]

5).压缩打包后的css

安装插件: optimize-css-assets-webpack-plugin

new OptimizeCssAssetsWebackpackPlugin()

6)编译图片 

安装 loader: file-loader url-loader

配置:

rules:[

{处理css中图片,转化为base64编码

test:/\.(jpg|png|gif|svg|jpeg)$i/,

loader:'url-loader',

options:{

限制图片大小500kb

limit:1023*500,  就是让require语法可以正常导入文件资源并且用url-loader进行转化

esModule:fasle

}

}

]

在html页面内引入本地图片路径处理方式

<img width='100' src="<%= require('img/01.jpg')%" alt=" 你好帅">

因为通过html-webpack-plugin插件渲染模板内部的是ejs语法,本地图片路径会当作node的路由去处理