脚手架开发(一)

76 阅读2分钟

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

价值:

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

和自动化构建工具区别

不满足需求 Jenkins , travis等通常在git hooks中触发 需要在服务端执行 无覆盖研发人员本地的功能 语言为JAVA 对前端不太友好

脚手架本质是一个操作系统的客户端

比如: vue create project-name 主命令 : vue command: create command:的param : project-name

输入 vue create demo

首先会在环境变量中 找到vue 执行的是 which vue

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

开发npm项目 , 该项目中应包含一个bin/vue.js文件 并将这个项目发布到npm 将npm项目安装到node的lib/node_modules 在node的bin目录下配置vue软连接指向指向 lib/node_modules/@vue/cli/bin/vue.js

问题:

为什么全局安装 @vue/cli后会添加的命令为vue? npm install -g @vue/cli

全局安装 @vue/cli时发生了什么?

为什么vue指向一个js文件 我们却可以直接通过vue命令去执行它?

脚手架实现原理

  1. 为什么全局安装@vue/cli 后会添加的命令为vue? npm install -g @vue/cli vue-cli目录 package.json "bin":{"vue":"bin/vue.js"}
  2. 全局安装@vue/cli时发生了什么? 依赖下载到bin目录 指定软连接
  3. 执行vue命令式发生了什么? 为什么vue指向一个js文件,我们可以直接通过vue命令去执行它 3.1 操作系统会通过which vue找到执行路径 在环境变量中找到vue命令是否被注册 3.2 #! /usr/bin/env node 可执行脚本

node 本质是一个客户端   Windows => node.exe   Mac=>可执行文件

执行流程

终端中输入 vue create project-name 在环境变量中查找是否有vue命令 相当于 which vue 没有: 返回 报错 不是命令 Mac command not defined 有: 查询实际软连接文件 通过/usr/bin/env node执行文件

开发流程

  1. 创建npm项目
  2. 创建脚手架入口文件 #! /usr/bin/env node 可执行脚本
  3. 配置package.json 添加bin
  4. 脚手架业务
  5. npm publish

调试本地脚手架

npm link or npm link your-lib 取消: npm unlink npm unlink your-lib rm -rf node_modules npm install

脚手架命令注册 和 参数解析

const argv = require("process").argv