首页 > 其他分享 >自定义react项目脚手架

自定义react项目脚手架

时间:2023-01-17 18:25:06浏览次数:53  
标签:自定义 项目 admin 接口 react 脚手架 模板

呀呀呀呀,快过年啦,开心!而且之前一直想做的2个事,一个从0到1自定义开发ui组件库(从0到1 开发一个自己的ui库)已经做好啦,还有一个做个自定义的脚手架,现在也做好啦。2个flag完成,开心开心。提前祝大家新年快乐呀!

1. 效果展示

好了,回归正题,说一说开发这个脚手架的过程。首先呈现一下使用效果,这个脚手架生成的项目,包含有登录、框架以及菜单、按钮、路由权限。

ps:刚创建的项目,它的登录、权限、登出等接口,都是我写在node里的自定义的一些接口,所以真实业务中,需要删除node,在service文件里去调用真实后端的接口,修改proxy代理。然后就可以直接在pages中开发业务啦。

1. 首先全局安装依赖:npm install  react-antd-layout-cli  -g

2. 创建项目:react-antd-layout-cli

3. 根据提示步骤执行命令,启动服务

   

2. 核心思想

这个脚手架的核心思想,我之前也写过一个【写一个自定义的脚手架的前奏】,脚手架本质其实就是复制文件。首先写一个项目的模板,然后脚手架本质就是读取这个模板的所有文件目录以及每个文件的内容,然后在执行命令的目录下,生成项目模板的文件夹,文件,并在文件中写入读取到的内容。

3. 开发步骤

3.1 开发模板项目

首先要开发模板项目,后续脚手架就是以这个项目为模板,然后一顿复制。我的这个脚手架项目模板是react-antd-admin,git地址:https://github.com/lishengqin/react-antd-admin

开发这个模板项目,就跟正常开发一个业务项目一样的,我的这个项目是react+ts+antd+vite。首先【npm create vite react-antd-admin --template react-ts】创建项目,然后安装各种依赖,键盘一顿敲敲敲,然后项目启动,浏览器访问长下面的样子就可以。

登录接口、登出接口、获取用户接口、获取权限接口这4个接口我是用node自己写的接口,充当后端提供的接口。以获取用户信息接口为例,贴一下代码,其他接口都类似。

 1 import express from 'express';
 2 import bodyParser from 'body-parser';
 3 let app = express();
 4 /* 中间件,便于获取请求中的request payload参数,可以直接req.body获取 */
 5 app.use(bodyParser.json());
 6 let loginInfo = { password: '', username: '' };
 7 // 登录接口
 8 app.post('/admin/admin/login', function (req, res) {
 9   loginInfo = { password: req.body.password, username: req.body.username };
10   res.send({
11     code: 0,
12     data: { token: 'tokenxxxxxxxx' },
13     msg: '请求成功',
14   });
15 });
16 // 获取用户信息接口
17 app.post('/admin/admin/get_admin_info', function (req, res) {
18   res.send({
19     code: 0,
20     data: {
21       admin_info: {
22         id: 1,
23         avatar: 'https://ts1.cn.mm.bing.net/th?id=OIP-C.3xZKPhJHn9NxDTaVJ5iIKgHaHa&w=170&h=169&c=8&rs=1&qlt=90&o=6&dpr=1.5&pid=3.1&rm=2',
25         real_name: loginInfo.username,
26         username: loginInfo.username,
27       },
28     },
29     msg: '请求成功',
30   });
31 });
   app.listen(8888, function () {        console.log(` 接口已启动:\n`, `http://localhost:${8888}\n`, `http://${getIPAddress()}:${8888}\n`);      });

node接口写好之后,需要启动一下服务,这也是为什么要执行【npm run service】,本质就是执行这个node的js文件。src/service 目录下接口调用跟正常业务调用一样。

以上,模板项目就写好了,然后发布到github上去。

3.2 开发脚手架项目

脚手架项目的目录结构如图所示:

 脚手架本质就是在这个核心js文件中,去读取我们发布在github的模板项目的目录,文件以及文件的内容。github常用的api接口(https://cloud.tencent.com/developer/article/1875456)

获取模板的文件和内容后,就是一顿创建目录,文件写入内容【fs.mkdirSync(path.resolve(创建的项目路径, 文件夹路径))】【fs.writeFileSync(path.resolve(创建的项目路径, 文件路径), content)】

在node调用第三方接口,需要使用【request】,首先安装request,【npm install request】,然后我稍微封装了一下。

 1 function _request(url) {
 2   return new Promise((resolve, reject) => {
 3     request(
 4       {
 5         url: url,
 6         method: 'GET',
 7         headers: {
 8           'user-agent': 'lishengqin-Octocat-reactLayoutCli', // 这个参数不可以少哦,不然会报错滴
 9         },
10       },
11       function (err, response, body) {
12         if (!err && response.statusCode == 200) {
13           return resolve(body);
14         } else {
15           return reject(err);
16         }
17       }
18     );
19   });
20 }

然后就是循环去获取文件夹中的文件,文件的内容,github获取文件内容,返回的是base64的格式,需要转为string。

1 function base64ToString(b64) {
3   return new Buffer.from(b64, 'base64').toString();
5 }

               

这个脚手架js文件写完后,需要在package.json中暴露出命令脚本。

 

 最后,【npm publish】发布这个脚手架就可以啦!

 

标签:自定义,项目,admin,接口,react,脚手架,模板
From: https://www.cnblogs.com/grow-up-up/p/17058467.html

相关文章

  • vue的自定义过滤器 - Filter
    vue的自定义过滤器-Filter一、过滤器的介绍二、局部过滤器1.定义2.使用2.1基础用法2.2串联用法2.3接收参数三、全局过滤器1.定义2.使用四、总结一、过滤器的介绍V......
  • Kong网关安装自定义插件
    安装自定义插件需要注意kong网关的版本要求!! 下面以安装Skywalking插件为例,要求Kong网关是2.2及以上版本,https://github.com/apache/skywalking-kong一、下载Skywalking......
  • Django自定义认证系统原理及源码分析解读
    疑问Django在​​如何自定义用户登录认证系统的时候​​,大家都会里面立马说自定义一个或者多个backend,比如通过账号+密码、邮箱+密码,邮箱+验证码、手机号+短信验证码等等......
  • React: 路由重定向
    解决方案参考链接https://v5.reactrouter.com/web/example/route-config......
  • React:styled-components有趣的用法
    背景用于记录一些styled-components的有趣的用法绑定a标签的链接编写伪类在styleComponents中使用参数传入参数......
  • vue脚手架—render函数
    一、关于不同版本Vue:1.vue.js和vue.runtime..js的区别:(1)vue.js是完整版的Vue,包含核心功能+模板解析器(2)vue.runtime..js是运行版的Vue,只包含核心功能,没有模板解析器......
  • 小满nestjs(第二十二章 nestjs 自定义装饰器)
    在Nestjs中我们使用了大量装饰器decorator,所以Nestjs也允许我们去自定义装饰器。 案例1自定义权限装饰器生成装饰器 nestgd[name]import{SetMetadata}from'@......
  • React: 动态添加样式
    问题背景在软件开发过程中,经常会出现动态添加style或className,比如:同一个表格组件在A处调用,需要固定前四列数据,B处调用则不用,那这时候,动态添加元素就派上了用场。解决方......
  • pytorch中自定义数据集加载对象重写Dataset
    在pytorch中,数据加载可以通过自动逸的数据集对象来实现,数据集对象被抽象为Dataset类,实现自定义的数据集需要继承Dataset,并实现相应的方法。下面针对给定任务进行重写Dataset......
  • 5. Pytest自定义前置后置:fixture参数详解(了解)
    一、前言我们上节课讲到fixture自定义前置函数的时候,有5个非必填参数,scope,params,autouse,ids,name。一般情况下这五个参数我们在工作中都不常用,但是个别情况会用到,这节......