前端脚手架搭建(part 1)

news2025/8/1 20:12:17

本篇主要介绍如何搭建前端脚手架,一步一步地实现通过搭建的脚手架下载对应的项目模板。

通过脚手架的创建,可以快速搭建项目的基础配置和模板,在部门项目开发的规范中尤其总要。

  1. 初始化项目:

创建一个文件夹,命名随便(自己自定义),这里我就命名为mfex-project,

然后在终端执行命令,初始化生成package.json

npm init -y

在文件夹下创建一个bin文件夹,在bin文件夹下面在创建一个index.js文件,如图所示

在index.js第一行加上这句话#! /usr/bin/env node,就是用node来执行此文件

在package.json中添加命令配置,这里命令为mfex-cli,可以自定义,添加"type":"module",

避免node版本带来的插件引入方式问题

npm link,讲这个npm包挂着在全局执行环境中

执行看看效果

  1. 读取用户命令行信息

需要用到commander,用来解析读取用户命令行中输入内容,commander文档

安装commander

npm i commander

主要用到以下api:

command():定义命令名字
action():注册callback函数
parse():解析命令行参数args

在index.js中开始编写读取用户输入命令的逻辑

import { program } from 'commander';
program
    .command('create <projectName>')
    .action((projectName) => {
        console.log(`项目名${projectName}`);
    })
program.parse(process.args)

输入命令npx mfex-project create mfexdemo

3、拉取项目模板

需要用到download-git-repo,文档

npm install download-git-repo
#! /usr/bin/env node

import { program } from 'commander';
import downLoad from 'download-git-repo'
import path from 'path'

program
    .command('create <projectName>')
    .action((projectName) => {
        console.log(`项目名${projectName}`);
        //项目git地址
        const demoGitUrl = 'https://gitee.com/Hehanjian/vue-vite-template';
        //当前目录
        const targetDir = path.join(process.cwd(), projectName)
        downLoad(`direct:${demoGitUrl}`, targetDir, { clone: true }, (err) => {
            if (err) {
                console.log('获取模版失败')
            } else {
                console.log('获取模版成功!')
            }
        })
    })
program.parse(process.args)

在命令行上输入npx mfex-project create mfexdemo

项目创建成功

现在项目模板是写死一个的,下面做成可以自主选择,需要用到inquirer,可以加强对命令行的交互,inquirer文档

npm install inquirer

提供2个模板创建选择,vue和react

#! /usr/bin/env node

import { program } from 'commander';
import downLoad from 'download-git-repo'
import path from 'path'
import inquirer from 'inquirer'
const questionList = [
    {
        "name": "features", // 选项名称
        "message": "请选择要创建的项目模板", // 选项提示语
        "type": "list", // 选项类型 另外还有 confirm check 等
        "choices": [
            {
                "name": "vue",
                "value": "vue",
                "description": "vue3+vite+ts",
                "link": "https://gitee.com/Hehanjian/vue-vite-template"
            },
            {
                "name": "react",
                "value": "react",
                "description": "react+vite+ts",
                "link": "https://gitee.com/Hehanjian/react-vite-template"
            }
        ]
    },

]


program
    .command('create <projectName>')
    .action((projectName) => {
        console.log(`项目名${projectName}`);
        //项目git地址
        // const demoGitUrl = 'https://gitee.com/Hehanjian/vue-vite-template';
        //当前目录
        const targetDir = path.join(process.cwd(), projectName)
        inquirer.prompt(questionList).then(res=>{
            //获取选择的是那个choice
            const project = questionList[0].choices.find(item=>item.value === res.features)
            downLoad(`direct:${project.link}`, targetDir, { clone: true }, (err) => {
                if (err) {
                    console.log('获取模版失败')
                } else {
                    console.log('获取模版成功!')
                }
            })
        })
       
    })
program.parse(process.args)

执行命令npx mfex-project create mfex-vue,回车

项目创建成功

4、美化字体颜色和图标

安装2个插件,ora:设置图标,chalk:设置字体颜色

npm install ora chalk
#! /usr/bin/env node

import { program } from 'commander';
import downLoad from 'download-git-repo'
import path from 'path'
import inquirer from 'inquirer'
import ora from 'ora';
import chalk from 'chalk';
const questionList = [
    {
        "name": "features", // 选项名称
        "message": "请选择要创建的项目模板", // 选项提示语
        "type": "list", // 选项类型 另外还有 confirm check 等
        "choices": [
            {
                "name": "vue",
                "value": "vue",
                "description": "vue3+vite+ts",
                "link": "https://gitee.com/Hehanjian/vue-vite-template"
            },
            {
                "name": "react",
                "value": "react",
                "description": "react+vite+ts",
                "link": "https://gitee.com/Hehanjian/react-vite-template"
            }
        ]
    },

]

const spinner = ora('模版资源下载中 ...')
program
    .command('create <projectName>')
    .action((projectName) => {
        console.log(`项目名${projectName}`);
        //项目git地址
        //当前目录
        const targetDir = path.join(process.cwd(), projectName)
        inquirer.prompt(questionList).then(res => {
            //获取选择的是那个choice
            const project = questionList[0].choices.find(item => item.value === res.features)
            downLoad(`direct:${project.link}`, targetDir, { clone: true }, (err) => {
                if (err) {
                    spinner.fail()
                    console.log(chalk.red('获取模版失败'))
                } else {
                    spinner.succeed()
                    console.log(chalk.green('获取模版成功!'))
                }
                spinner.stop()
            })
        })

    })
program.parse(process.args)

运行结果如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/394444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】螺旋矩阵 [M](数组)

54. 螺旋矩阵 - 力扣&#xff08;LeetCode&#xff09; 一、题目 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,…

OceanBase 生态产品:时序数据库CeresDB 正式发布 1.0 版本

欢迎访问OceanBase官网获取更多信息&#xff1a;https://www.oceanbase.com/ CeresDB 是一款拥有计算存储分离架构的分布式时序数据库&#xff0c;其存储层可以基于 OceanBase KV、OSS 等。经过近一年的开源研发工作&#xff0c;CeresDB 1.0 现已正式发布&#xff0c;达到生产…

tcsh常用配置

查看当前的shell类型 在 Linux 的世界中&#xff0c;有着许多 shell 程序。常见的有&#xff1a; Bourne shell (sh) C shell (csh) TC shell (tcsh) Korn shell (ksh) Bourne Again shell (bash) 其中&#xff0c;最常用的就是bash和tcsh&#xff0c;本次文章介绍tcsh的…

HACKTHEBOX——Help

nmap可以看到对外开放了22,80,3000端口可以看到80端口和3000端口都运行着http服务&#xff0c;先从web着手切入TCP/80访问web提示无法连接help.htb&#xff0c;在/etc/hosts中写入IP与域名的映射打开只是一个apache default页面&#xff0c;没什么好看的使用gobuster扫描网站目…

配电室常见6大隐患,你中了几个?

当今社会&#xff0c;电力的重要性不言而喻&#xff0c;在变电站、配电室等一些场景中放置有大量的电气设备。 为保障这些设备正常运行&#xff0c;以免因为这些设备故障导致无法正常进行电力供应&#xff0c;严重影响生产和生活&#xff0c;我们需要运行一套动环监控系统。 配…

【MySQL】约束

文章目录1. 约束2. 非空约束 NOT NULL3. 唯一性约束 UNIQUE4. 主键约束 PRIMARY KEY5. 自增约束 AUTO_INCREMENT6. 外键约束FOREIGN KEY7. 默认值约束 DEFAULT8. 小结1. 约束 为了保证数据的完整性&#xff0c;SQL规范以约束的方式对表数据进行额外的条件限制。从以下四个方面…

达人合作加持品牌布局,3.8女神玩转流量策略!

随着迅猛发展的“她经济”&#xff0c;使社区本就作为内容种草的平台&#xff0c;自带“营销基因”。在3.8女神节即将到来之际&#xff0c;如何充分利用平台女性资源优势&#xff0c;借助达人合作等手段&#xff0c;实现迅速引流&#xff0c;来为大家详细解读下。一、小红书节日…

数据的标准化处理

假设各个指标之间的水平相差很大&#xff0c;此时直接使用原始指标进行分析时&#xff0c;数值较大的指标&#xff0c;在评价模型中的绝对作用就会显得较为突出和重要&#xff0c;而数值较小的指标&#xff0c;其作用则可能就会显得微不足道。 因此&#xff0c;为了统一比较的标…

60% 程序员大呼:我要远程办公!

近几年数字化的普及&#xff0c;白领们从挤地铁、打卡、开会、写日报转变成“早上9点视频会议”&#xff0c;企业的办公场所也从写字楼、会议室、工位变成了手机、电脑中的线上会议室&#xff0c;远程办公已经成为一种流行的办公形式。《财富》杂志发现&#xff0c;75%的员工表…

全网火爆,软件测试面试题大全,接口测试题+回答 (18k+的offer)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 面试测试工程师的时…

UML全解

目录UML结构性图表类图类图中具体类、抽象、接口和包的表示法在UML类图中表示具体类在UML类图中表示抽象类在UML类图中表示接口在UML类图中表示包关系泛化&#xff08;Generalization&#xff09;实现&#xff08;Realization&#xff09;关联&#xff08;Association&#xff…

Pyspark基础入门7_RDD的内核调度

Pyspark 注&#xff1a;大家觉得博客好的话&#xff0c;别忘了点赞收藏呀&#xff0c;本人每周都会更新关于人工智能和大数据相关的内容&#xff0c;内容多为原创&#xff0c;Python Java Scala SQL 代码&#xff0c;CV NLP 推荐系统等&#xff0c;Spark Flink Kafka Hbase Hi…

20230307 LS-DYNA易拉罐变形学习笔记

一、定义材料 定义铝合金材料 在左侧把density拖至alumium处 即可在下方输入密度值 同样的道理,将各向同性弹性拉到材料处,即可定义杨氏模量、泊松比等参数

TDengine | 04 | TDengine3.0.2.6二进制包部署

1 前期准备 1.1 版本 TDengine :3.0.2.6 Linux&#xff1a;centos 7 1.2 机器规划 机器IPhostname192.168.3.21master.bafang.com192.168.3.22node1.bafang.com192.168.3.23node2.bafang.com 1.3 修改这三个节点上的hostname hostnamectl set-hostname master.bafang.com…

HBase常用Shell命令

HBase提供了一个非常方便的命令行交互工具HBase Shell。通过HBase Shell&#xff0c;HBase可以与MySQL命令行一样创建表、索引&#xff0c;也可以增加、删除和修改数据&#xff0c;同时集群的管理、状态查看等也可以通过HBase Shell实现。 一、数据定义语言 数据定义语言&…

Acwing: 一道关于线段树的好题(有助于全面理解线段树)

题目链接&#x1f517;&#xff1a;2643. 序列操作 - AcWing题库 前驱知识&#xff1a;需要理解线段树的结构和程序基本框架、以及懒标记的操作。 题目描述 题目分析 对区间在线进行修改和查询&#xff0c;一般就是用线段树来解决&#xff0c;观察到题目一共有五个操作&…

查看python第三方库的依赖pkgs

课题组的服务器不给连外网&#xff0c;安装python第三方库就只能手动离线安装。但是python第三方库可能会迭代依赖&#xff0c;单纯的pip show [pkg]是看不出来的…… 参考链接&#xff1a;查看python第三方库的依赖 https://blog.csdn.net/qq_38316655/article/details/127943…

【多层交叉transformer:高光谱和多光谱图像融合】

MCT-Net: Multi-hierarchical cross transformer for hyperspectral and multispectral image fusion &#xff08;MCT-Net&#xff1a;用于高光谱和多光谱图像融合的多层交叉transformer&#xff09; 考虑到光学成像的局限性&#xff0c;图像采集设备通常在空间信息和光谱信…

04-SQL基础(表管理,约束,多表连接,子查询)

本文章主要内容 1、表的管理&#xff1a;创建表&#xff0c;修改表结构&#xff0c;删除字段&#xff0c;修改字段&#xff0c;添加字段&#xff0c;删除表&#xff0c;添加表约束&#xff1b; 2、数据管理&#xff1a;新增记录&#xff0c;修改记录&#xff0c;删除记录&…

分享10个不错的C语言开源项目

今天跟大家分享10个重量级的C语言开源项目&#xff0c;C语言确实经得住考验&#xff1a; Redis&#xff1a;Redis是一个开源的高性能的键值对数据库。它以C语言编写&#xff0c;具有极高的性能和可靠性。 Nginx&#xff1a;Nginx是一个高性能的HTTP和反向代理服务器&#xff0…