[关闭]
@jikeytang 2023-02-03T09:27:09.000000Z 字数 7007 阅读 494

react-admin.cn 上线总结 - Readme

2023-blog


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

先从全局角度总结一下:

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

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

打包

  1. $ cd react-admin-cn\apps\md
  2. $ 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发布,包含大量新特性

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

  1. import { OverflowMenuHorizontal } from '@carbon/icons-react'
  2. <OverflowMenuHorizontal />
  1. // 疯狂点击只响应最后一次
  2. const onSearch = debounce(() => {
  3. onEmit()
  4. }, 500)
  1. <InfiniteScroll
  2. style={{ overflow: 'visible' }}
  3. hasMore={hasMore}
  4. loader={(
  5. <div className="text-center mt-5">
  6. <Spin indicator={antIcon} />
  7. </div>
  8. )}
  9. >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 文件结构

  1. ├─.next // 开发目录
  2. ├─.out // 发布目录
  3. ├─api // 请求文件
  4. ├─components // 公共组件
  5. ├─config // 配置
  6. ├─context
  7. ├─hooks
  8. ├─layouts // 布局文件
  9. ├─pages // 页面
  10. ├─public // 静态资源
  11. ├─styles // 所有 Scss 文件
  12. └─utils // 工具文件

2.5 如何在本地运行

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

  1. pnpm --stream -r dev

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

  1. $ cd react-admin-cn\apps\md
  2. $ pnpm dev
  3. $ cd react-admin-cn\apps\ssr
  4. $ pnpm dev

其它Node版本信息

  1. // 切换环境
  2. nvm install 16.0.0
  3. nvm use 16.0.0
  4. // 安装依赖
  5. npm install
  6. // 启动项目
  7. npm start
  8. // 清除 node_modules
  9. npm run clean
  10. // 全局安装 rimraf 之后方可使用
  11. npm i rimraf -g
  12. // 清除 node_modules 重新安装依赖
  13. // 等同于 npm run clean && npm install
  14. npm run reinstall

2.6 如何发布上线

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

  1. // next.config.js
  2. module.exports = {
  3. distDir: '.out',
  4. }
  5. // .gitignore
  6. # next.js
  7. /.next/
  8. /out/
  9. /.out/
2.6.1 Nginx配置

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

  1. location / {
  2. proxy_pass http://127.0.0.1:3600/;
  3. proxy_http_version 1.1;
  4. proxy_set_header Host $host;
  5. }
2.6.2 启动Nextjs

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

  1. module.exports = {
  2. apps: [{
  3. name: 'react-admin-ssr',
  4. script: 'npm',
  5. args: 'start',
  6. cwd: '/www/wwwroot/react-admin.cn',
  7. autorestart: true,
  8. watch: true,
  9. // 不用监听的文件
  10. ignore_watch: [
  11. 'node_modules',
  12. 'logs'
  13. ],
  14. max_memory_restart: '1G',
  15. env: {
  16. NODE_ENV: 'development'
  17. },
  18. env_production: {
  19. NODE_ENV: 'production',
  20. BASE_PATH: "",
  21. PORT: 3006
  22. }
  23. }]
  24. }

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

2.6.3 发布问题
  1. import Image from 'next/image'
  2. import Logo from '@/public/images/logo.png'
  1. generateBuildId: async () => 'v1',
  1. images: {
  2. domains: ['react-admin.cn'],
  3. },
  1. $ cd /www/server/nginx/proxy_cache_dir // nginx缓存目录
  2. $ pkill nginx // 强制关闭
  3. $ /etc/init.d/nginx start // 启动
  4. $ /etc/init.d/nginx stop
  5. $ /etc/init.d/nginx restart
  1. 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/admin
pages中除了路由文件之外不建议放其它文件,要放其它扩展名文件还需要在next.config.js中增加配置

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

3.3 基础布局

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

3.4 获取数据

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

3.5 SEO增强

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

3.6 更新到Next.js 13

Next.js 12

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

Next.js 13

  1. `<title>{`首页 - ${title}`}</title>`

Next.js 12

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

Next.js 13

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

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

  1. $ npx @next/codemod new-link .

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

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注