脚手架开发

脚手架开发

开发脚手架的核心目标:提升前端研发效能

内容:

  • 创建项目+通用代码
    • 埋点
    • http 请求
    • 工具方法
    • 组件库
  • git 操作
    • 创建仓库
    • 代码冲突
    • 远程代码同步
    • 创建版本
    • 发布打 tag
  • 构建和发布上线
    • 依赖安装和构建
    • 资源上传 cdn
    • 域名绑定
    • 测试/正式服务器

脚手架核心价值将研发过程:

  • 自动化:项目重复代码拷贝/git 操作/发布上线操作
  • 标准化:项目创建/git flow/发布流程/回滚流程
  • 数据化:研发过程系统化、数据化,使得研发过程可量化

自动化构建工具:jenkins、trvis 通常需要 git hooks 触发,在服务端运行需要定制化操作,整个过程比较复杂

脚手架执行原理:
以 vue-cli 为例子

  1. 在终端输入 vue create xxx
  2. 终端解析出 vue 命令
  3. 终端在环境变量中找到(相当于 which vue,找不到提示 commond not found) vue 命令
  4. 根据 node/bin/目录下 vue 命令(软连接)连接到 node 全局依赖 lib/node_modules 包下的 vue.js
  5. 终端利用 node(/usr/bin/env node) 执行 vue.js
  6. vue.js 解析 command/options
  7. vue.js 执行 command
  8. 执行完毕,退出

疑问:

  1. 为什么全局安装@vue/cli 会添加 vue 命令?
    答: 在 package.json 中的 {bin: {‘vue’: ‘bin/vue.js’}}配置
  2. 全局安装 npm install -g @vue/cli 时发生了什么?
    答:首先会把@vue/cli 这个项目安装在 node 的 lib/node_modules 目录下,然后检查项目中 package 中是否存在 bin 属性,如果存在的话会在 node 的 bin 目录下创建一个对应的软连接
  3. 执行 vue 命令发生了什么?
    答:操作系统会找到 which vue 的目录路径并执行这个路径的文件(先去环境变量中找对应命令,拿到目录执行)
  4. 怎么直接执行一个 js 文件,不通过 node?
    答:在文件顶部写 #!/usr/bin/env node,相当于告诉操作系统去环境变量中找 node 命令去执行这个文件;/usr/bin/env node xxx.js = xxx.js(顶部添加指令) = node test.js

创建软连接命令:

  • ln -s /Users/foo/xxx.js vue

脚手架开发难点:

  1. 分包:将复杂的系统拆分成若干个模块
  2. 命令注册:vue create、vue add 等
  3. 参数解析 vue command options(全称、简称) params,帮助信息:Usage: vue <’xxx’> [‘options’]; Options: xxx
  4. 命令行交互(让用户选择或者输入)
  5. 日志打印
  6. 命令行文字变色
  7. 网络通信:http/websocket
  8. 文件处理

从应用角度看如何开发一个脚手架:

  1. 开发 npm 项目,项目中包含一个 bin/vue.js 文件,并将项目发布到 npm
  2. 将 npm 项目安装到 node 的 lib/node_modules 中
  3. 在 node 的 bin 目录下配置 vue 软连接到 lib/node_modules/@vue/cli/bin/vue.js
  4. 执行 vue 的命令时就可以找到 vue.js 执行

评论