自动化构建
什么是构建
- 构建的过程:就是厨师将原始的食物,通过各种手段,做成可以实用的饭菜。
为什么构建(构建内容)
一些代码需要编译(CSS,JS),保证浏览器的兼容性
- 将Less或Sass转换成CSS
- 将ES6+的新语法转成ES5
有些代码需要压缩(CSS,JS,HTML,图片等)
- 压缩之后的代码体积更小,加载更快,节省带宽。
有些代码需要做格式化校验,统一代码风格
构建的过程
- 源代码 -> * 编译、压缩、格式化.... -> 生产代码
构建初体验
将less文件转换成css文件
步骤
- 安装less插件 npm i less -g
- 检查是否安装成功 lessc -h (备注:c -> complie编译)
- 通过lessc命令转换 lessc input.less output.css
什么是自动化构建?
- 把所有可能的任务,按照一定的逻辑排列组合在一起,最终通过一条命令,把所有的任务都执行了。
自动化构建过程
- 源代码 -> 转换 -> 压缩 -> 生产代码
npm scripts
- 实现自动化构建的最简方式
什么是npm scripts
- npm允许在package.json文件中,使用scripts字段定义脚本。
npm scripts 自定义脚本命令
声明命令(package.json)
"scripts":{
"foo": "node bar.js"
}
执行命令(命令行)
// 两条命令相同的效果
$ npm run foo
$ node bar.js
举例:自动化构建样式文件
- 手动:lessc index.less index.css
- 自动
// 1.在package.json中定义构建任务
"scripts":{
"style":"lessc index.less index.css"
}
// 2.命令行中执行任务
npm run style
npm scripts中任务的执行方式(并行 / 串行)
并行执行(parallel)
- 任务1 & 任务2
- 任务之间没有先后顺序,同时执行可以提高执行效率。
串行执行(series)
- 任务1 && 任务2
- 任务之间有先后顺序,先执行前一个任务,后执行下一个
&(并行执行)在Window下不起作用
- npm-run-all插件
// 1.现在项目中安装
npm i npm-run-all -D
// 2.并行执行:其中p是parallel(并行)的意思
npm-run-all -p 脚本1 脚本2 脚本3
// 或简写
run-p 脚本1 脚本2 脚本3
// 2.串行执行 其中s是series(串行)的意思
npm-run-all -s 脚本1 脚本2 脚本3
// 或简写
run-s 脚本1 脚本2 脚本3
npm scripts实践
- 这里需要安装server服务器
- 执行命令:npm i server -g
- 发布http的服务
构建样式文件
- 将 less 转成 css
- npm i less -g
- lessc input.less output.css
- 压缩 css 文件
- npm i minify -g
- minify output.css > output.min.css
步骤
- 初始化项目(npm init --yes)
- 添加script命令(less + minify)
- 执行scripts命令(npm run 命令)
构建源码
// 1. 在package.json文件中script标签中声明命令
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"p":"lessc test.less test.css && minify test.css > test.min.css"
}
// 2.执行命令(命令行)
npm run p
构建脚本文件
- 存在兼容性问题:比如ES6的箭头函数在IE浏览器就存在兼容问题
Babel插件
- 可以将ES6+新语法转换成ES5
ECMAScript的版本和发布时间
- 2009年:ES5
- 2015年:ES6
- 2016年:ES2016
- 2017年:ES2017
- 2018年:ES2018
Babel转换规则
- babel-preset-es2018: ES2018转换ES2017
- babel-preset-es2017:ES2017转换ES2016
- babel-preset-es2016:ES2016转换ES6
- babel-preset-es2015:ES6转换ES5
- babel-preset-env:ES2018~ES6 全部转换成 ES5
Babel转换命令
- 单个文件
- babel input.js --out-file output.js
- 或 babel input.js -o output.js
- 整个目录
- babel src --out-dir dist
- 或 babel src -d dist
步骤
-
初始化项目 npm init -yes
-
安装Babel npm install -g babel-core babel-cli
- babel-core: babel转换核心API babel-cli: babel命令行
-
安装转码规则 npm install -g babel-preset-env
-
配置转换规则 .babelrc
- 一定要在项目的根目录下创建。
- 配置文件书写代码
// 一段json格式的代码 { "presets":[ "env" ] } -
在npm scripts 中添加转换命令(babel src -d dist)
- src 表示 已有的文件夹的名称
- dist 表示 需要生成的文件夹的名称
- babel scripts -d js
-
执行命令 npm run “名字”
- 就可以将scripts文件夹下的所有脚本文件全部转换成满足ES5语法的文件。
代码格式校验
为什么
- 不同的工程师,写的代码风格不同
- 项目代码提交时,需要保持统一的代码格式
如何实现(通过工具完成代码格式校验)
- 提供编码规范
- 根据编码规范,自动检查代码
ESLint
- 对JavaScript代码格式进行检查
步骤
-
初始化项目 npm init --yes
-
安装ESLint npm i eslint -g
-
初始化配置文件 eslint --init
- 会生成一个.json的文件
- (自定义检查规范)可以在里面的rule字段,设置自己的要求
"rules": { "indent":["error",2] }
-
检查JS代码格式
- 单个文件 eslint path/filename.js
- 整个目录 eslint path/dirname
如果想要知道更多自定义的属性,去eslint.org官网查看
- indet:["error",2]
- 空格缩进2格,违反的报错error
- quotes:["error","double"]
- 字符数据的串,不能使用双引号。
StyleLint
- 对css代码格式进行检查
步骤
-
初始化项目 npm init --yes
-
安装StyleLint npm install --global stylelint
-
安装检测标准 npm install -global stylelint-config-standard
-
创建配置文件 .stylelintrc.json
- 书写代码
{ "extends":"stylelint-config-standard" } - 添加自定义规则: 官网查找stylelint.io
"rules":{ "block-no-empty":true }
- 书写代码
-
检查CSS代码格式
- 单个文件 stylelint path/filename.css
- 整个项目 stylelint **/*.css