Webpack
构建工具
1、压缩代码、排除没有被引用的依赖、
2、兼容性 (系统差异、浏览器差异、浏览器版本差异)
支持es的模块化问题,以及commonjs,支持扩展静态资源打包
3、保密性
4、作用域问题(JQuery 绑定 $、loadash 绑定 _ )、文件太大、可维护性差
原生js常见问题
- 文件太大
多个文件会导致加载速度慢,而合并成一个文件,会造成网络瓶颈,会有短暂的白屏现象 - 作用域问题
在一些库文件,jquery、lodash、bootstrap分别会在window下绑定全局变量(例如$、_、还有自己绑定的变量),会污染window对象变得臃肿 - 可读性差
- 可维护性弱
所有文件都合并在一个超大文件里,可读性差,维护性差
作用域问题解决
早期使用grunt、gulp来管理项目资源(任务执行器)、利用js的立即调用函数表达式(IIFE),将所有项目文件拼接组合在一起,现在则是以esmodule,comminjs的模块化,但浏览器并不完全支持commonjs,通过webpack对commonjs进行打包
代码拆分问题
1 | // main1.js |
1 | // main2.js |
1 | // 通过ECMAScript(es)模块化 html调用 |
安装
--save和--development的区别
npm 可以指定依赖是安装在生产环境还是开发环境
如果希望是在开发环境用,使用--development(-D)
如果希望是在生产环境用,使用--save(-S)
webpack配置项
指定webpack配置
命令行使用
1
webpack --config lg.webpack.js
可直接在项目package.json 中配置调试命令,
1 | { |
输入输出
命令行 参数
1
2
3# --entry 输入
# --output-path 输出路径
npm webpack --entry ./src/main1.js --output-path ./build配置文件
1
2
3
4
5
6
7
8
9// webpack.config.js
const path = require('path')
module.exports = {
entry: '.src/index.js', // 输入
output: {
filename: 'build.js', // 输出文件名
path: path.resolve(__dirname, 'dist') // 输出路径
}
}
Loader
为什么需要使用loader
前端项目中,需要处理不同类型的文件,例如 JavaScript、CSS、图片、字体等
- 处理不同类型的文件
css,sass/less、TypeScript、图片、字体等,es语法转换 - 模块化
以模块化的方式组织和管理,根据配置保持项目的一致性 - 提高开发效率
构建时自动处理代码、样式、资源的转换工作 - 解决ES语法的兼容性
大部分浏览器不兼容太新的es语法
loader是什么
Loader 是 Webpack 中的一个功能,用于转换模块的类型
常用的 loader 包括:
babel-loader:用于将 ES6+ 的 JavaScript 代码转换为 ES5,使其能够兼容旧版浏览器。style-loader和css-loader:用于处理 CSS 文件,使其能够在 JavaScript 中引入。sass-loader:用于将 SASS(或 SCSS)文件转换为 CSS。file-loader和url-loader:用于处理图片和字体等静态资源。
css-loader、style-loader
安装
1
2npm i css-loader -D
npm i style-loader -D行内使用
1
import 'css-loader!../css/main.css'
配置文件使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30// webpack.config.js
// 同一个loader数组,执行顺序为+
module.exports = {
module: {
reules:[
{
test: /\.css$/, // 正则匹配规则,匹配需要处理的文件
use: [ // 使用的loader(执行顺序从下往上)
{
loader: 'style-loader'
// options: 输出路径
},
{
loader: 'css-loader'
}
]
},
// 单个loader简写方式1
{
test: /\.css$/,
loader: 'css-loader'
}
// 简写方式2
{
test: /\.css$/,
use: ['style-loader', 'css-loader'] // 执行顺序从右到左
}
]
}
}
less-loader
安装
1
2
3
4npm i less-loader -D
//
npm i less -D
npm less xx.less xx.css使用
1
2
3
4
5
6
7// main.less
@bgColor: 'green';
@fontSize: 25px;
body{
background-color: @bgColor;
font-size: @fontSize;
}配置文件使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28// webpack.config.js
// 同一个loader数组,执行顺序为+
module.exports = {
module: {
reules:[
{
test: /\.css$/, // 正则匹配规则,匹配需要处理的文件
use: [ // 使用的loader(执行顺序从下往上)
{
loader: 'style-loader'
// options: 输出路径
},
{
loader: 'css-loader'
},
{
loader: 'less-loader'
}
]
},
// 简写方式2
{
test: /\.css$/,
use: ['style-loader', 'css-loader','less-loader'] // 执行顺序从右到左
}
]
}
}
Browserslist
postcss
postcss-loader
postcss-preset-env
aaaaaaaaaaaaaaaaaaaaaaaassssssss

