wepback风头正火 ,可是公司一直在用gulp,正好遇上年末活动,借此机会第一次尝试了webpack,说实话webpack真的很强大,内容一层一层递进。css
这几天跟着官网跑了一遍,而后写了本身的配置文件,由于活动内容很少,不少强大的功能没有用上,可是相信对于入门来讲足够了。html
下面来总结并附上源码前端
ES6,CommonJs,Amdnode
Webpack能够经过众多loader和plugin完成许多gulp上的功能,但Webpack本质在于模块打包,而gulp的本质在于执行任务;使用webpack-stream包能够实现gulp和webpack的搭配使用jquery
核心概念webpack
1.入口:指定使用哪一个模块来做为构建内部依赖图的开始,随后打包成bundleweb
2.输出:定义输出生产的bundle的位置及文件名;npm
3.loader:让webpack能够处理非js模块;loader 能够将全部类型的文件转换为webpack 可以处理的有效模块。json
4. 插件:执行的任务范围包括从打包优化和压缩,一直到从新定义环境中的变量,目的在于完成一些loader没法完成的任务。gulp
经常使用配置项
1.mode: ‘development’|| ‘production’ || ‘none’
2.entry: array || obj
3.output: {
path: path.resolve(__dirname, "dist"), // 输出文件的目标路径
filename:’bundle.js’,// 打包后的文件名
publicPath: ‘static’// 输出解析文件目录,url相对于html
}
4.module: {
rules: [
{
test: /\.js$/, // 指定使用此loader的文件
use: ‘babel-loader’,
options: { },
include: /src/, // 匹配项
exclude: /node_modules/ // 非匹配项
}
]
}
5.plugins: […instance]
6.devServer: {
host: ‘localhost’,
port: ‘8080’,
contentBase: Boolean|| string || array, // 服务器从哪里获取内容
hot:boolean, // 是否开启webpack模块热替换
open: Boolean, // 是否自动打开浏览器
proxy: { path: targetUrl}, // 代理
…others
}
7.resolve: {
alias: {
test: url
},
extensions: [.js, .json]
}
8.devtool: string || false
可选值:
cheap-eval-source-map
eval-source-map
cheap-source-map
source-map
cheap-module-eval-source-map
…others
经常使用loader及plugin
loader
Css-loader:解析css中资源路径;
Sass-loader:sass转码为css
Postcss-loader:使webpack能够用postcss处理css
Px2rem-loader: px转换为rem
Style-loader:将css以style标签的形式插入到dom中
Babel-loader:转码js以提升兼容性
url-loader:图片转base64
webpack imagemin-webpack-plugin 压缩图片
file-loader:将文件输出到输出目录并返回文件路径
html-loader:处理html中资源路径
eslint-loader:使js支持eslint
plugin
html-webpack-plugin:根据模板导出html文件,并注入bundle
DinePlugin: 建立编译时能够进行配置的全局变量。
HashedModuleIdsPlugin: 根据模块的相对路径生成一个四位数的hash做为模块id
extract-text-webpack-plugin:分离css
mini-css-extract-plugin:分离css
uglifyjs-webpack-plugin:压缩js
optimize-css-assets-webpack-plugin:压缩css
clean-webpack-plugin: 清空某个目录
cli经常使用命令
--config 使用指定的配置文件
--env.key=value 指定环境变量
--mode=production 指定模式
--progress 打印编译进度的百分比
--display-error-details 展现错误细节
--define 定义环境变量
-w 观察文件变化,变化后从新执行构建流程
--hot 开启模块热替换
--json > stats.json 将编译结果的各类信息输出为json文件
--profile
捕获编译时每一个步骤的时间信息
配置文件编写
前端常见需求:
1) Js压缩
2) Css压缩
3) Css提取
4) 小图片转base64
5) Px转rem
6) Css前缀添加
7) Sass转码
8) Babel转码
9) 文件名加hash
10) 文件编码格式转换(常见utf-8与gbk互转)
11) 代码分离
12) Eslint
13) 模块热替换
14) 配置编译过程的全局变量
15) 打包后的代码注入html中
1. 经常使用模块变量
__dirname:当前文件夹路径
2. 经常使用占位符
[hash]:模块标识符的hash(后拼接:‘:n’可指定长度)
[chunkhash]: chunk内容的hash(后拼接:‘:n’可指定长度)
[name]:模块名称
[id]: 模块标识符
3. 配置文件使用commonjs编写的,配置类型有下面几种:
1) 导出一个配置对象
2) 导出一个函数
3) 导出一个promise
代码分离
该功能能够把代码分离到不一样的 bundle 中,而后能够按需加载或并行加载这些文件。代码分离能够用于获取更小的 bundle,以及控制资源加载优先级,若是使用合理,会极大影响加载时间。
代码分离的方式:
1.手动配置多个入口文件
2.使用webpack自带的splitChunks功能
3.使用import()动态导入
下面附上本身的web.config.js