项目模板总结 & 脚手架开发

简介: 项目模板总结 & 脚手架开发

640.jpg

写在前面


在开始一个新的项目时,首先要做的就是搭建开发环境。我几乎没有使用过create-react-app等脚手架工具,都是自己慢慢地写webpack配置,写相关脚本等。这样能最大限度的保持灵活性,可以随时方便地修改环境。当然,坏处也很明显,效率较低。


于是,我决定根据以往的项目,总结一个比较通用的项目模板,开发一个简单的脚手架工具,后续起新项目时直接使用。


项目模板


项目模板总结如下


.|____.babelrc                           # babel配置|____LICENSE                            # 项目协议|____dist                               # 打包产出目录|____README.md |____.gitignore|____package-lock.json|____package.json|____build | |____plugins                          # 自定义的webpack插件| | |____MyPlugin.js                    | |____server                           # 脚本| | |____buildServer.js                     # 打包脚本| | |____devServer.js                       # 本地开发server| |____webpackConfig                    # webpack配置| | |____webpack.dev.config.js              # 开发时配置| | |____webpack.base.config.js             # 基本配置| | |____webpack.build.config.js            # 打包时配置| | |____devProxyConfig.js                  # 本地开发代理配置|____postcss.config.js                  # postcss 配置|____src                                 # 项目代码| |____template                           # html模板| | |____template.html| |____lib                                # 公用库代码| | |____tools.js| |____index.js                           # 入口文件js| |____index.scss                         # 入口文件css


模板是以react为技术栈的,里面的配置都是写死的,常用的package都已经在package.json中声明,直接npm install即可。需要更改打包配置,直接修改build目录下的代码即可。


脚手架


开发脚手架时,首先定义好脚手架的用法,首先得先取一个名字,随便来一个:easy-cli-react


接下来,明确一下脚手架的用法,在命令行输入:


easy-cli-react myProject


执行上面的命令会创建一个名称为myProject的目录,然后把项目模板的代码自动下载到myProject目录里。


开发脚手架时,最常用的是commander这个库。commander是一个Node.js 命令行接口的完整解决方案。具体文档参考:


https://github.com/tj/commander.js/blob/HEAD/Readme_zh-CN.md


开发


代码逻辑如下:

1、首先使用commander,获取项目名称。


const commander = require('commander');const chalk = require('chalk');const fs = require('fs-extra');const path = require('path');const request = require('request');const progress = require('request-progress');const exec = require('child_process').exec;
const program = new commander.Command();let projectName = undefined;
// 初始化命令行program    .name('easy-cli-react')    .version('0.0.1')    .description('Init a react project using easy-template-react')    .arguments('<projectName>')    .action(name => {        projectName = name;    })    .parse(process.argv);
if (!projectName) {    console.log(chalk.red('[Error]: need projectName'));    process.exit();}


2、接着,从github上下载之前项目模板代码,并解压,再把目录名称改成之前设置的项目名称。


const downloadZipName = 'template.zip';progress(request(templateUrl))    .on('progress', function (state) {        const progress = Math.floor((state.percent || 0) * 100)+ '%';        console.log(chalk.cyan(`[easy-cli-react]downloading project template (${progress})`));    })    .on('error', function (err) {        console.log(chalk.red(`[error]${err}`));    })    .on('end', function () {
        console.log(chalk.cyan('[easy-cli-react]downloading project template (100%)'));          // 省略...
        // 解压并且重命名文件夹        const cmdStr = [            `unzip -o ${downloadZipName} -d ./`,            `rm ${downloadZipName}`,            `mv easy-template-react-master ${projectName}`        ].join(' && ');        exec(cmdStr);
        // 省略...    })    .pipe(fs.createWriteStream(downloadZipName));


3、对项目进行初始化。这里暂时只简单修改一下package.json内的项目名称。


// 修改package.json内的项目名const packageJson = fs.readJsonSync(`${projectName}/package.json`);packageJson.name = projectName;fs.writeFileSync(    `${projectName}/package.json`,     JSON.stringify(packageJson, null, 4));console.log(chalk.cyan('[easy-cli-react]done!!'));


创建bin命令


开发时,是使用node index.js ${projectName}进行调试的,想要实现命令行功能,还需要进行下面的工作。


1、在代码第一行增加下面这一行代码:


#!/usr/bin/env node

这个是为了告诉操作系统,用node执行脚本文件。具体可以参考这篇文章:

https://juejin.im/post/5cb93cd651882578b148c637


2、在脚手架的package.json中配置bin


"bin": {    "easy-cli-react": "index.js"}



脚手架的完整代码在这里:

https://github.com/CoyPan/easy-cli-react


测试安装


上述工作完成后,在脚手架目录下执行npm link,就可以执行自己的命令了。


$ easy-cli-react myProject
#[easy-cli-react]start to download project template...#[easy-cli-react]downloading project template (0%)#[easy-cli-react]downloading project template (100%)#[easy-cli-react]start to init project...#[easy-cli-react]done!!


写在后面


我已经把这个简单的cli发布到npm了,执行npm install -g easy-cli-react安装即可。虽然还是一个简陋的工具,但已经可以大大解决自己的需求了。想要起一个新的项目,直接执行一条命令,再修改一下模板代码即可。符合预期。

相关文章
|
存储 编译器 C语言
【C语言】数组(一维、二维数组的简单介绍)
【C语言】数组(一维、二维数组的简单介绍)
618 1
|
18天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
6835 30
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
3天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
605 138
|
3天前
|
人工智能 弹性计算 运维
阿里云发布堡垒机智能运维Agent,运维交互进入自然语言新时代
支持自然语言运维,提升效率与安全双保障。
1145 0
|
10天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
1171 1
|
13天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1272 3
|
11天前
|
人工智能 弹性计算 安全
阿里云618活动时间、活动入口、优惠活动详细解读
2026年阿里云618创新加速季已全面开启,作为年度力度最大的云产品促销活动,本次大促覆盖轻量应用服务器、ECS云服务器、GPU云服务器、数据库、AI算力、安全服务、CDN等全品类产品,推出5亿元算力补贴、新用户限时秒杀、普惠满减、企业专享、免费试用、云大使返佣等多重福利,个人开发者、中小企业、AI团队均可享受专属低价。本文将系统梳理2026年阿里云618活动的完整时间节点、官方参与入口、各类优惠细则、使用规则、热门产品推荐及实操代码,帮助用户精准参与、高效省钱,以最低成本完成上云部署。
982 5
|
9天前
|
人工智能 自然语言处理 安全
Vibe Coding 实战:别盲目跟风,先分清 vibe coding 适合什么场景
本文系统总结vibe coding实战经验:明确其适用场景(原型、小工具、标准化模块),剖析5步落地流程(场景判定→结构化提示词→目录初始化→分模块生成→自动化校验),指出四大常见误区,并推荐适配工具Trae。强调“场景匹配+规则前置”是提效关键,避免盲目套用。
805 1