3 Star 67 Fork 3

jsfront/react-admin-cn

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

随着 http://www.react-admin.cn 的上线,今天总结一下这个项目的点点滴滴。这项目有几个模块组成,分别是

先从全局角度总结一下:

  • 定位

    最原始的出发点是为react开发者提供一个以管理模板为核心,其它资源为辅助的信息知识类平台。能匹配管理模板及周边几个关键字相关的内容整合到一起,方便筛选查找。

  • 目标用户

    React相关的开发者

  • 技术选型

    react 首选next,后端其实首推go,奈何此项目周边以前端为主的群体比较多,所以选择nest,备选koa2,数据库为mysql

  • 代码组织

    采用的是Pnpm Monorepo, Monorepo 是把多个工程放到一个 git 仓库中进行管理,共享,复用代码等的工具。 开发时模块相互引用,发布时模块独立打包。这样代码能复用,发布又灵活,方便后续的扩展。比如后续要加个Admin平台,直接在apps中创建模块即可。

1. Dumi

1.1 基本介绍

Dumi 近期发布2.x版本,初步评估还是满足简单Markdown转换为文档平台的需求。 对Node版本有特殊要求,最低支持 Node.js v14 版本,因为在Pnpm中为了平衡Nest,最后运行版本为Node 16.0.0

1.2 如何发布上线

上线提前,基础配置约定好,减免后期踩坑的风险。比如Dumi要部署到二级目录http://react-admin.cn/doc,那除了配置base之外还要配置publicPath

export default defineConfig({
  base: BaseUrl,
  publicPath: BaseUrl, // 打包文件时,引入地址生成 publicPath/xxx.js
});

打包

$ cd react-admin-cn\apps\md
$ pnpm build

然后上传 react-admin-cn\apps\md\dist目录中的文件到wwwroot/domain/doc目录即可。

2. Next介绍

Next要求Node最低版本Node.js 14.6.0

2.1 基本介绍

Nextjs 近期发了13,增加了快如闪电的Turbopack,在命令行手工开启,next dev --turbo,为了项目快速开发,此项目暂时没有开启。其它新特性:NextJS 13发布,包含大量新特性

有几个插件用的还是比较方便的:

import { OverflowMenuHorizontal } from '@carbon/icons-react'
<OverflowMenuHorizontal />
  • @nextui-org/react antd 的备份方案,4.x antd的翻页组件有bug,暂时用nextui来代替。

  • lodash 只用了debounce,也可以使用lodash-es版本,偶尔打包时会报错,所以选择稳定版本。

// 疯狂点击只响应最后一次
const onSearch = debounce(() => {
  onEmit()
}, 500)
  • Tailwindcss 本来我迷恋于Unocss的灵活和速度,可惜在Nextjs中热更新容易失去响应,只能换回Tailwindcss,虽然Unocss也提供了一个Nextjs下的案例

  • @bytemd/react bytemd是字节开发的一款富文本编辑器,可用于vue,react,主题可以使用juejin-markdown-themes,虽然名叫juejin,其它里边有很多风格的css选择,具体在这个 node_modules\juejin-markdown-themes\dist 目录下。

  • qrcode.react 其中一个页面需要分享展示用到二维码,用的这款,按照文档使用起来也没有大的问题。

  • react-copy-to-clipboard 按钮复制用这款,也没有什么大的问题。

  • react-infinite-scroll-component 滚动加载用到了这款,出现的问题是出现滚动条,添加样式强制显示即可隐藏滚动条。

<InfiniteScroll
    style={{ overflow: 'visible' }}
    hasMore={hasMore}
    loader={(
    <div className="text-center mt-5">
        <Spin indicator={antIcon} />
    </div>
    )}
>text</InfiniteScroll>

2.3 技术栈

技术 说明 官网
Nextjs React应用开发框架 https://nextjs.org/
Mobx 全局状态管理模式 https://mobx.js.org/
Mobx-react-lite mobx-react的轻量化版本 https://github.com/mobxjs/mobx-react-lite
Axios HTTP 库 https://github.com/axios/axios
Ant-design UI组件库 https://ant-design.gitee.io/
Nextui UI组件库 https://nextui.org/
Ahooks React Hooks 库 https://ahooks.js.org/
Bytemd Markdown编辑器 https://github.com/bytedance/bytemd
Tinymce 富文本编辑器 https://www.tiny.cloud/
Dayjs JavaScript 日期处理类库 https://day.js.org/zh-CN/
SCSS CSS预处理器 https://sass-lang.com/
Carbon 图标字体库 https://carbondesignsystem.com/guidelines/icons/library/
Qrcode 二维码 https://github.com/zpao/qrcode.react
React-copy-to-clipboard 复制 https://github.com/nkbt/react-copy-to-clipboard
React-infinite-scroll-component 滚动加载 https://github.com/ankeetmaini/react-infinite-scroll-component
Tailwindcss 原子CSS库 https://tailwindcss.com/docs/guides/nextjs
Juejin-markdown-themes 掘金 Markdown 主题 https://github.com/xitu/juejin-markdown-themes
Typescript 类型约束 https://www.typescriptlang.org/

2.3 开发工具

系统 工具 官网
Vscode 开发工具 https://code.visualstudio.com/
Navicat 数据库管理工具 https://www.navicat.com.cn/
Atom 源码阅读工具 https://atom.io/
Cmder Cmd替代工具[windows] https://cmder.net/
Notepad3 临时单文件编辑[windows] https://www.rizonesoft.com/downloads/notepad3/
Chrome 调试工具 https://www.google.com/intl/zh-CN/chrome/

2.4 文件结构

├─.next // 开发目录
├─.out // 发布目录
├─api // 请求文件
├─components // 公共组件
├─config // 配置
├─context
├─hooks 
├─layouts // 布局文件
├─pages // 页面
├─public // 静态资源
├─styles // 所有 Scss 文件
└─utils // 工具文件

2.5 如何在本地运行

根目录下运行 pnpm install,然后运行 pnpm dev,最后执行的是:

pnpm --stream -r dev

也可以只启动子应用,进入子目录下运行pnpm dev。比如:

$ cd react-admin-cn\apps\md
$ pnpm dev
$ cd react-admin-cn\apps\ssr
$ pnpm dev

其它Node版本信息

// 切换环境
nvm install 16.0.0
nvm use 16.0.0

// 安装依赖
npm install

// 启动项目
npm start

// 清除 node_modules
npm run clean

// 全局安装 rimraf 之后方可使用
npm i rimraf -g

// 清除 node_modules 重新安装依赖
// 等同于 npm run clean && npm install
npm run reinstall

2.6 如何发布上线

需要注意的是:Nextjs的开发运行目录和打包上线目录默认都是.next,所以,打包输出结果要仔细看,要不然会把开发时的文件误上传。解决办法就是修改打包后输出目录:

// next.config.js
module.exports = {
  distDir: '.out',
}

// .gitignore
# next.js
/.next/
/out/
/.out/
2.6.1 Nginx配置

首先在nginx增加配置,转发nextjs的启动端口。 Nextjs虽然支持basePath进行二级目录的部署,可惜一刷新又出现basePath路径找不到的情况,只能在根目录部署。

location / {
  proxy_pass http://127.0.0.1:3600/;
  proxy_http_version 1.1;
  proxy_set_header Host $host;
}
2.6.2 启动Nextjs

根目录新建ecosystem.config.js,然后用pm2启动这个文件就可以了。

module.exports = {
  apps: [{
    name: 'react-admin-ssr',
    script: 'npm',
    args: 'start',
    cwd: '/www/wwwroot/react-admin.cn',
    autorestart: true,
    watch: true,
    // 不用监听的文件
    ignore_watch: [
      'node_modules',
      'logs'
    ],
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production',
      BASE_PATH: "",
      PORT: 3006
    }
  }]
}

然后根据域名访问,如果出现500,说明后端相关有问题,查看Nginx, Pm2日志进行排错。

2.6.3 发布问题
  • Favicon 图片不能拷贝到发布目录 就算安装url-loader也不能解决,解决办法,转换为Base64图片。
  • 图片路径 文档讲可以用 /,然后打包后还是路径丢失
import Image from 'next/image'
import Logo from '@/public/images/logo.png'
  • 手工调整buildid Nextjs前台静态资源会识别版本信息,最终影响生成目录路径在 /.next/static下,可以手工修改也可以是Git commit id
generateBuildId: async () => 'v1',
  • image images中添加允许域名
images: {
    domains: ['react-admin.cn'],
},
  • package.json 需要上传package.json到根目录然后在服务端全量安装node_modules
  • Nginx 缓存 在其它机型上没有碰到这个问题,只有在腾讯云上碰到这个问题,代理转发有缓存,需要清目录后杀掉进程后启动nginx
$ cd /www/server/nginx/proxy_cache_dir // nginx缓存目录
$ pkill nginx // 强制关闭
$ /etc/init.d/nginx start // 启动
$ /etc/init.d/nginx stop
$ /etc/init.d/nginx restart
TypeError: Cannot read properties of undefined (reading 'context')

然后设置为false就没事了。 swc全称是Speedy Web Compiler,基于Rust语言的JS编译器,主要对标Babel,准备代替Babel。

3. 开发介绍

3.1 基本介绍

3.2 约定式路由

约定式路由式的开发,即 pages目录下所有文件夹层级为路由访问路径。比如 pages/admin/index.tsx,那访问的路径就是https://react-admin.cn/adminpages中除了路由文件之外不建议放其它文件,要放其它扩展名文件还需要在next.config.js中增加配置

module.exports = {
  pageExtensions: ['mdx', 'jsx', 'js', 'ts', 'tsx']
}

3.3 基础布局

基础的布局由Layouts负责,共有这几个:

  • default 负责基础页面的上中下式布局
  • custom 备选

3.4 获取数据

Nextjs 共有两种渲染模式,这两个模式下有两种获取数据的方式

  • 静态模式(默认),即在构建时生成 html,并每次请求时复用

    • getStaticProps 静态模式下使用,在构建时会调用该函数获取数据并返回到 props,会在构建时渲染生成 html
    • getStaticProps 中的 context 参数包含了常用的请求的 params,preview,previewData,locale 等参数
  • 服务器端渲染模式,即每次请求时在服务器端重新生成 html。

    • getServerSideProps 服务器端渲染模式下使用,会在每次请求时先获取数据,接着重新生成 html 后再将页面返回到客户端。
    • getServerSideProps 中的 context 参数包含了常用的请求的 req、res、params、query 等参数
  • axios 页面上在useEffect中异步获取数据,这块的代码在浏览器端运行。

3.5 SEO增强

通过 next/head 组件增加页面的metakeywords, description 标签。

3.6 更新到Next.js 13

  • Title变化

Next.js 12

<title>首页 - {title}</title>

Next.js 13

`<title>{`首页 - ${title}`}</title>`
  • Link的变化

Next.js 12

<Link href=""><a target="_blank" rel="noreferrer">{title}</a></Link>

Next.js 13

<Link href="" target="_blank" rel="noreferrer">{title}</Link>

用这个命令全局替换,然后全局校验Eslint

$ npx @next/codemod new-link .

如果还想找回此文,您可以点右上角 💖Star 💖 收藏 + 支持

还可以加Q群进行反馈交流:

  • Node交流群 422910907
  • React交流群 530415177
  • Javascript交流群 492107297
MIT License Copyright (c) 2022 杰克 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

react-admin.cn 基于nextjs, ant, ahooks, axios, bytemd, scss 的管理模板集中地 展开 收起
README
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/jsfront/react-admin-cn.git
git@gitee.com:jsfront/react-admin-cn.git
jsfront
react-admin-cn
react-admin-cn
master

搜索帮助