Webpack
Webpack 是一个前端资源加载/打包工具, 只需要相对简单的配置,就可以整合出一套前端开发解决方案
Webpack 一个主要的特性是可以实现前端开发的模块化, 它能分析整个前端工程的项目结构, 找到相关的 JavaScrit 模块以及他的一些样式文件,图片文件等, 并将他们整合成一个或多个文件输出,提供给浏览器执行。
Webpack 通过相应的配置可以实现 JS 代码的降级(ES6 to ES5), 方言的转译(TypeScript to Js, Less to CSS)等
注: 模块化是指: 把前端程序开发像后端开发一样按功能切割成多个小文件(封装成接口), 有利于实现前端的工程化开发,例如 WebApp(SPA)开发
注意: 采用 webpack 打包之后, IE8 的兼容有很严重的问题
Webpack 2.x 介绍&文档
Webpack 2.x 入门博客
功能介绍
本文介绍的 Webpack 脚手架实现如下功能:
- js 文件整合打包, 输出 bundle.js(webpack 输出结果文件称为 bundle 文件), babel转码(ES6 to SE5)
- css/less 文件整合打包, 可以打入 bundle.js 文件中, 也可以提取为 bundle.css 文件
- 图片打包, 如果图片大小小于 0.5kb, 直接以 Base64 格式加入 bundle.js, 如果大于 0.5kb 直接输出到 bundle 文件所在目录的 image/ 路径下
- 测试环境打包: 在 chrome 下可 debug。
- 生产环境打包: 代码压缩丑化, 自动添加 bundle 文件的版本, 自动更新 html 中对应的 bundle 文件路径
- 提供 webpack-dev-server 服务, 通过 localhost:3000 访问。
工程目录结构
1 | package-tool #工程目录 |
使用脚手架
1、安装脚手架
安装 nodeJs
下载: https://github.com/FeifeiyuM/package-tool/tree/webpack2
命令行进入脚手架根目录, 执行 npm install
2、新建工程
例如:
a、在 ./src/路径下新建文件夹 test
b、在 ./src/test 路径下 新建 index.js 作为打包的入口文件, 新建html文件 index.html, 新建样式文件 index.less
注意: 入口文件名,与 html 文件名务必保持一致, 例如: 如果入口文件名为 main.js, 与其对应的 html 文件名为 main.html
c、编写入口文件 & 样式文件
1 | //index.js |
1 | p { |
c、在 html 文件中添加外联样式和脚本,
<script src=”/assets/test/index.bundle.js”></script>,
<link rel=”stylesheet” href=”/assets/test2/index.bundle.css”>
对于路径为 ./src/test/index.js 的入口文件, 输出 bundle 文件为 /assets/test/index.bundle.js, 其中 /assets/为 web 的静态文件路径, 本脚手架配置的静态文件路径为 /assets/
如果使能抽取 css, (下一节的 extractCss = true), 打包路径中会输出 /assets/test/index.bundle.css 文件
1 | <head> |
3、打包参数配置
进入工程根目录下的 package.config.js 文件, 配置打包参数(添加打包入口文件, 静态文件路径等)
1 | //是否允许分片打包 |
2、打包命令
命令行 console 进入当前工程根目录
1、开发环境打包,且使用 webpack-dev-server 服务,
- 执行 npm start, 采用这种打包模式, 在静态文件路径中不会输出打包结果,
- 在浏览器输入 localhost:3000, 进入对应的 html 文件打开,即可进行调试
2、开发环境打包, 不使用 webpack-dev-server 服务
- 执行 npm run dev, 打包结束后会在静态文件路径输出打包结果
- 例如: 入口文件为 ‘./src/test/index.js’, 打包输出结果为, ./assets/test/index.bundle.js, 中间路径 web/test 主要用于区分不同的打包工程
3、生产环境打包,
- 执行 npm run build, 打包结束后会在静态文件路径输出打包结果, 打包输出文件名中有一段随机数, 用于版本区分。
- 打包结束后会在 bundle 输出路径中生成一个 manifest.json 文件,里面记录了打包的结果
- 同时对应 html 文件中的静态文件配置会作出相应的修改, 无需手动修改
源码解析
Webpack.config.js
1 |
|
Babel 配置文件 .babelrc
与webpack1.x 的 配置略有改变, 支持 tree-shaking, 剔除无用代码
1
2
3
4
5
6
7
8
9
10
11
12 {
"presets": [
[
"es2015",
{
"modules": false
}
],
"stage-2",
"es2016"
]
}
postcss.config.js
本文件是 wepback postcss-loader 的相关配置, 详情见,postcss-loader 文档
1 |
|
bundle.to.html.js
本文件脚本主要是实现 html 文件的外联脚本文件样式文件路径的自动修改
1 |
|
package.json
该文件是 node 依赖管理文件, 同时打包启动命令也在该文件中配置
1 | { |