自动化构建
什么是构建
所谓构建,是指将源代码转换成生产代码的过程。
为什么需要将源代码转换成生产代码?或者说需要构建哪些内容?
- 代码需要编译( CSS3,JS6+ ), 保证浏览器的兼容性
- 代码需要压缩( CSS,JS,HTML,图片等 )。节省带宽,提高加载速度
- 代码需要做格式化校验,统一代码风格。
以上这些问题,都是构建的内容。
什么是自动化构建
不管是代码压缩还是 less 转换,通过手动方式进行工作量巨大(例如手动压缩2000行代码,估计程序员就疯了)。
自动化构建是指将手动构建任务,进行排列组合,然后通过命令(或工具)自动执行的过程。
实现自动化构建最简单的方式是 npm scripts (npm 脚本)。
npm scripts
npm 允许在 package.json
文件里面,使用 scripts
字段定义脚本命令。
{
"scripts": {
// 命令名称: 任务
"foo": "node bar.js"
}
}
scripts
字段是一个对象。它的每一个属性,对应一段脚本。比如,foo
命令对应的脚本是node bar.js
。
# 命令行下使用 npm run <命令>,就可以执行这段脚本。
npm run foo
# 等同于执行
node bar.js
npm scripts任务的执行方式
如果 npm 脚本里面需要执行多个任务,那么需要明确它们的执行顺序。 如何选择正确的任务执行顺序?
- 串行执行:任务之间有明确的先后顺序,必须先执行前一个任务,然后才能执行下一个任务
- 相当于 4X100 接力,拿到上一个队员的接力棒后,下一个队员才能继续跑
- 并行执行:任务之间没有明确的先后顺序,同时执行,可以提高效率
- 相当于 100 米短跑,8个人同时起跑
如果是并行执行(即同时的平行执行),可以使用 &
符号。
{
"scripts": {
"parallel": "node task1.js & node task2.js & node task3.js"
}
}
如果是串行执行(前一个任务成功后,才执行下一个任务),可以使用 &&
符号。
{
"scripts": {
"series": "node task1.js && node task2.js && node task3.js"
}
}
但是,& 符号在 Windows 操作系统下不起作用。 此时,我们可以借助插件,在 Windows 下实现并 npm-run-all
# 先在项目中安装
npm i npm-run-all -D
# 并行执行:其中 p 是 parallel(并行)的意思
npm-run-all -p 脚本1 脚本2 脚本3
# 或简写为
run-p 脚本1 脚本2 脚本3
# 串行执行:其中 s 是 series(串行)的意思
npm-run-all -s 脚本1 脚本2 脚本3
# 或简写为
run-s 脚本1 脚本2 脚本3
构建样式文件
构建样式文件就是将开发环境下的 CSS (包括 Less 或 Sass)源代码,转成线上环境使用的代码。这里的构建任务可能有多个。
以构建Less编译和压缩的样式文件为例:
- 编译 less 文件
# 安装 less 包,编译 less 文件
npm i less -g
# 在 package.json 中,添加 less 解析命令
"scripts": {
"style": "lessc style.less style.css",
}
# 执行命令(自动编译)
npm run style
- 压缩 css 文件
# 安装 minify 包, 压缩文件
npm i minify -g
# 在 package.json 中,添加 minify 压缩命令
"scripts": {
# 先编译 && 然后压缩
"style": "lessc style.less style.css && minify style.css > style.min.css",
}
# 执行命令(自动编译)
npm run style
构建脚本文件
为解决ES6+的浏览器兼容问题,我们需要构建脚本文件来处理。
在开发过程中,经常使用 ES6+ 新特性时,一些旧的浏览器,不支持 JS 的新语法。所以,在项目上线之前,就需要将新的语法特性解析成兼容性更好的 ES5 。最常用的编译工具是 Babel,Babel插件可以将ES6+新语法转成ES5。 Babel官网:babeljs.io/
构建步骤:
- 初始化项目(npminit-yes)
- 安装Babel(npminstall-gbabel-corebabe卜cli)
- 安装转换规则(npminstall-gbabel-preset-env)
- 配置转换规则()
- 在npm scripts中添加转换命令(babelsrc-ddist)
- 执行转换命令
# 安装 babel核心,Babel客户端
npm i -g babel-core babel-cli
![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4619ed4d23244cff818573e629536278~tplv-k3u1fbpfcp-watermark.image)
# 安装转码规则
npm i -g babel-preset-env
# 在项目根目录下,新建 .babelrc 文件(注意文件名前有一个点),并添加转换规则
{
"presets": [
"env"
],
}
# 通过 babel 编译单个 j s文件
babel input.js --out-file output.js
# 或者
babel input.js -o output.js
# 通过 babel 编译整个目录
babel js --out-dir scripts
# 或者
babel js -d scripts
# 在 package.json 中,添加 babel 解析命令
"scripts": {
"script": "babel js -d scripts",
}
# 执行命令(自动编译)
npm run script
添加压缩命令
# 在 package.json 中,添加 babel 解析和压缩命令
"scripts": {
"script": "babel js -d scripts && minify scripts/main.js > scripts/script.min.js",
}
自动化构建对于现代的前端开发非常关键,这也催生了很多优秀的自动化构建工具。这里推荐Gulp。
代码格式校验
每个程序员都有自己的编码习惯,最常见的莫过于:
- 有的人代码结尾必须加分号
;
,有的人觉得不加分号;
更好看; - 有的人写字符串时,喜欢用双引号,而有的人喜欢用单引号;
- 有的人代码缩进喜欢用 4 个空格,有的人喜欢用 2 个空格;
诸如此类,但是项目开发一般是多人协作,所以,不同的工程师,写的代码风格不同。一般你写自己的代码怎么折腾都没关系,但整个项目需要有一个统一的编码规范。这样别人看源码就能够看得懂。
那么问题来了,总不能一行行去检查代码吧,这是一件很蠢的事情。凡是重复性的工作,都应该通过工具来完成。
这个工具应该做两件事情:
- 提供编码规范
- 根据编码规范,自动检查代码。
在前端工程化中,不同的代码,使用不同的工具进行检测。
例如:通常我们使用 ESLint 来检测 JavaScript 代码;我们使用 StyleLint 来检测 CSS 代码。
ESLint使用
ESLint 是 JSLint 的升级版本,是用来检查 JS 代码质量的插件。通过 ESLint 可以统一不同开发者的代码风格。
官网:eslint.org/
ESLint使用步骤:
- 初始化项目(npm init --yes)
- 安装ESLint(npm i eslint -g)
- 初始化配置文件(eslint --init)
- 检查JS代码格式
- 单个文件(eslint path/filenamejs)
- 整个目录(eslint path/dirname)
先创建项目
mkdir lint-demo
cd lint-demo
# 初始化项目,生成 package.json
npm init --yes
安装 ESLint:
$ npm i eslint -g
初始化一个配置文件:
# 之后进入交互窗口,询问一些问题;根据问题生成配置文件 例如:.eslintrc.json
$ eslint --init
配置规则
rules: { "规则名": [规则值, 规则配置] }
# 配置检测规则
{
"env": {
"browser": true,
"commonjs": true,
"es2021": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": 12
},
"rules": {
"indent": [ "error", 2 ], # 使用两个空格缩进
"quotes": [ "error", "double" ] # 使用双引号包裹字符串
}
}
之后,你可以在任何文件或目录上运行ESLint如下:
$ eslint yourfile.js
StyleLint使用
StyleLint 是检测 CSS 代码格式的插件。
官网:stylelint.io/
使用步骤:
- 初始化项目(
npm init --yes
) - 安装StyleLint(
npm install --global stylelint
) - 安装检测标准(
npm install --global stylelint-config-standard
) - 创建配置文件(
.stylelintrc.json
) - 检查css代码格式
- 单个文件(
stylelint path/filename.css
) - 整个项目(
stylelint **/*.css
)
- 单个文件(
StyleLint 初体验
安装插件
# stylelint 是运行工具,stylelint-config-standard 是 stylelint 的推荐配置
npm i --g stylelint stylelint-config-standard
在项目的根目录下,创建 .stylelintrc.json 文件,添加如下配置
{
"extends": "stylelint-config-standard",
"rules": {
# 除了使用 stylelint-config-standard,我们还可以在 rules 字段中自定义校验规则
"block-no-empty": true # 代码块不能为空
}
}
运行 stylelint,检测 CSS 代码格式
# 注意:路径是写在双引号中的
# 检测一个文件
stylelint 文件路径/文件名.css
# 检测整个项目下,所有的 CSS 文件
stylelint **/*.css
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!