概述
背景
在公司的项目中,每次碰到新需求的时候,你是不是都还在用新建页面 => 往页面中添加内容,如vue模板 => 添加路由。难道不觉得麻烦吗?如果是的话,不妨试试自动化构建吧,太香了~
element-ui的自动化构建是怎么做的
在开源项目中,特别是UI库的开发,有太多人协同,每个人的code习惯也都不一样。并且UI库中每个组件都还会涉及到多语言、单元测试、路由、组件的readme.md文档等文件。所以如果每次都慢慢去创建这些则太麻烦了,并且多人修改公共文件如路由文件会产生非常多的冲突。所以在开源项目中都会有非常多的脚本,去自动化生成某些文件。
makefile
在element-ui项目根目录有个makefile文件,每条命令的作用都在注释中。windows用户要使用make命令执行脚本得下载。mac用户不需要。
@# 默认的#注释会在日志中输出,@#则不会 @# .PHONY的作用: 在下方的脚本命令中忽略检查是否与dist、test目录冲突,也就是说无论如何都会去执行命令 .PHONY: dist test @# 执行make命令时,默认执行help脚本 default: help @# 执行`make build-theme`就是执行`npm run build:theme`脚本, @# : 冒号前面为执行的命令,冒号后面第二行第一个应该为一个tab,tab之后跟脚本命令 @# 也就是说下面的为 'tab+npm npm build: theme' # build all theme @# 上面的build theme注释可以查看下方的截图,会在日志中输出 build-theme: npm run build:theme install: npm install dev: npm run dev @# $()为使用函数 @# $@ 为当前命令本身比如 'make new',$@ 就是 new @# MAKECMDGOALS 特殊变量,该变量记录了命令行参数指定的目标列表,也就是说使用这个变量,我们可以得到命令行的参数 @# 比如我们在创建新组件时,使用脚本`make new wailen` MAKECMDGOALS 就等于 wailen @# filter-out 反过滤函数,过滤掉 $(MAKECMDGOALS) 中所有含有 $@ 的内容 @# 结合new.js的内容,下方脚本的意思也就是创建新组建,传入组件名称,组件名称不得为new,如果组件名称取为new,可以查看下方截图 new: node build/bin/new.js $(filter-out $@,$(MAKECMDGOALS)) @# 省略了一些脚本,感兴趣的可以自行查看源码 help: @echo " 33[35mmake 33[0m 33[1m命令使用说明 33[0m" @echo " 33[35mmake install 33[0mt 33[0mt 33[0mt 33[0mt--- 安装依赖" @echo " 33[35mmake new <component-name> [中文名] 33[0mt--- 创建新组件 package. 例如 'make new button 按钮'" @echo " 33[35mmake dev 33[0mt 33[0mt 33[0mt 33[0mt--- 开发模式" @echo " 33[35mmake dist 33[0mt 33[0mt 33[0mt 33[0mt--- 编译项目,生成目标文件" @echo " 33[35mmake deploy 33[0mt 33[0mt 33[0mt 33[0mt--- 部署 demo" @echo " 33[35mmake pub 33[0mt 33[0mt 33[0mt 33[0mt--- 发布到 npm 上" @echo " 33[35mmake new-lang <lang>