帮助开发者在开发过程中使用的开发工具,开发框架,使用脚手架无须从头开始搭建或者编写底层软件
1.脚手架需求评审
-
创建项目
- 初始化创建环境
- 项目配置引导
- 获取项目模板
- 安装项目依赖
- 完成项目创建
-
打包项目
- 检测打包环境(版本等信息)
- 配置打包环境,例如使用rollup等
- 打包
-
监听模式启动项目
- 启动项目可以实现热更新,实现代码lint等功能,类似于webpack的热更新
-
项目代码检测
- eslint代码检测和格式化以及代码压缩
-
创建模块
- 拉取模块
- 替换模块占位信息
- 生成新模块
-
检测当前项目信息
- 实现项目的环境检测,例如当前项目版本,依赖版本以及其他相关信息
2.脚手架方案设计
- 技术选型
sade||commander命令inquire命令行交互chalk为命令上色ora加载状态semver环境监测,依赖约束execa执行命令np包发布fs-extra文件操作
- 初始化脚手架项目
- 创建node项目
- 安装sade,编写一个hello命令,实现控制台输出"你好"
- 发布到本地包
- 使用这个脚手架
- 定义一个项目横板
- 准备模板
- 本地定义
- 远程模板
- 选择模板
- 准备模板
- 打包与检测
- 优秀开源项目脚手架源码赏析
脚手架的价值
- 复用原则
- DRY原则(DON't Repeat Yourself),软件设计原则和模式最本质的思想是
消除重复 - 开闭原则
初中级:
a. 熟悉脚手架需求:熟悉企业脚手架需求,能根据业务需要设计合适命令行工具
b. 基础架构与方案设计:掌握基于 monorepo 架构设计思想,掌握项目规范约束,掌握命令行工具架构细节
c. 了解命令行工具开发与调试方法:了解基于 monorepo 的设计开发模式,会本地调试命令行工具
高级:
a. 深入理解命令行工具需求与实现:深入理解命令行工具设计思路与实现方案
b. 掌握灵活命令行工具的架构思路:基于插件化思想封装设计命令行工具,命令、实现统一遵循插件协议
背景介绍
在企业级软件开发过程中,开发团队通常面临规范化、流程化和自动化的挑战。命令行工具能够有效解决这些问题,它的作用体现在以下几个方面:
1.规范化问题:
项目开发中,代码风格、目录结构、组件命名等方面容易因个人习惯而不一致,导致项目的整体质量下降,维护成本上升。 。规范化的需求不仅涉及代码层面,还包括项目构建、依赖管理、测试框架的使用等各个方面。
2.流程化问题:
大型项目通常涉及多个子系统或模块,开发流程复杂,人工操作容易出错或操作。
- 在项目初始化、环境配置、依赖安装、测试、部署等流程中,如果没有统一的流程指导和工具辅助,容易出现流程混乱,效率低下的问题。
- 自动化问题:
随着项目复杂度的增加,手动处理日常开发中的重复性工作不仅耗时耗力,还容易引入人为错误。自动化工具能够帮助团队在开发、测试、构建、部署等环节减少重复劳动,提高工作效率,确保质量的一致性。
3.命令设计
命令行工具的设计需要围绕上述核心流程来构建,通常包含以下主要命令:
- create:用于初始化新项目,生成基本的项目结构和必要的配置文件,
- info:输出脚手架相关信息
- serve:启动项目,在本地启动
- build: 构建项目,生成可部署的生产环境代码
- preview:本地启动一个服务,查看构建后产物加载效果
- lint: 检查代码风格和质量,报告并修复不符合规范的代码
- deploy: 部署项目到指定的环境中,如开发环境、测试环境、生产环境等
- test: 运行测试用例,确保代码的正确性和健壮性
1. 初始化 pnpm Monorepo
-
如何初始化一个 pnpm Monorepo 项目结构和基本配置。
git initpnpm init
1.配置pnpm-workspace.yaml
这个配置文件定义了 Monorepo 的工作空间结构:
packages/*:用于存放可复用的库或工具包apps/*:用于存放具体的应用程序
这种结构允许在同一个仓库中管理多个相关的包,便于统一管理和依赖共享。
packages:
- 'packages/*'
- 'apps/*'
2. packages文件夹
在 packages 目录下创建三个核心项目:
cli/index.ts:命令行工具入口core/index.ts:核心功能模块shared/index.ts:共享工具模块
这种分离关注点的设计便于模块化开发和维护。
3.配置 cli 文件夹下 的 package.json,bin/wzmserve
1. package.json
关键配置说明:
"type": "module":启用 ES Module 支持"bin"字段:定义全局命令wzm-cli-demo,指向bin/wzmserve脚本
{
"name": "@wzm/cli",
"version": "0.0.1",
"description": "",
"main": "index.js",
"type": "module",
"bin": {
"wzm-cli-demo": "bin/wzmserve"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"devDependencies":{
"@wzm/cli-core":"workspace:*" // 当前项目下的npm包
},
"keywords": [],
"author": "",
"license": "ISC",
"packageManager": "pnpm@10.15.0"
}
2. bin/wzmserve
这是一个标准的 Node.js CLI 入口脚本:
#!/usr/bin/env node:声明,告诉系统用 Node.js 执行此脚本- 导入并执行 ../index.ts 主文件
- 输出执行信息
#!/usr/bin/env node
// require("../index.ts");
import "../index.ts";
console.log("第一个脚手架执行命令");
3. 全局链接测试
通过 npm link 命令将 CLI 工具链接到全局环境,使得 wzm-cli-demo 命令可以在任何地方执行。执行结果展示了各模块的加载顺序和执行输出。
这个初始化过程为构建一个功能完整的 Monorepo CLI 工具奠定了基础架构,采用了现代化的模块化和包管理方案。
在 cli 文件夹下执行 npm link,软连接创建到全局,执行wzm-cli-demo