GAGU 所有的代码都在同一个仓库里,由三部分构成:
gagu
|- gagu-back-end
|- gagu-front-end
|- gagu-website
项目中只上传了 yarn.lock 文件,所以使用 yarn 而不是 npm 来安装依赖,可以确保我们在开发坏境的运行结果是一致的。
为了最大程度地减少包的体积,项目独立出来后,逐步移除了原本使用的 UI 组件库 BlueprintJS,换成了可以按需加载的 SemiUI。
同时移除的还有 Windows 的壁纸和 MIUI V5 图标,单色图标也从 Carbon Design System 换成了 RemixIcon。几乎所有的图标都使用自 RemixIcon,即使是内部应用的图标也是从中选取至 Figma 编辑而来。
整体仍然使用了 React + TailwindCSS 的组合,构建后的体积非常小。
# dev
$ cd gagu-front-end
$ yarn
$ yarn start
在选型时对比了几种常见的框架,最终选择 NestJS 的原因很简单,因为它采用了 ES6 的模块语法,且对 TS 有着良好的支持。
还有就是考虑到前、后端的代码会放在同一个仓库,切换上下文时,统一的代码风格或多或少能降低一些切换成本。
# dev
$ cd gagu-back-end
$ yarn
$ yarn start:dev
尝试一下 Astro,第一次使用它。
# dev
$ cd gagu-website
$ yarn
$ yarn start
version field 位于 ./package.jsonGAGU_VERSION 位于 ./gagu-back-end/src/utils/constant.util.tsversion field 位于 ./gagu-website/.env同步 ./gagu-back-end/package.json 中的生产环境依赖项到 ./package.json 中
执行构建脚本 npm run build:npm,参考 ./build-npm.sh
预发布检查,更新包体积信息,发布到 NPM
二进制版的构建需要先完成上一步骤
然后安装好 ./package.json 中的依赖,是的,这有点冗余,这是最初决定将三部分放至同一仓库造成的,好在问题不大
在 gagu 目录下执行 npm run build:pkg,你需要事先全局安装好 Vercel/pkg npm i -g pkg
构建后的内容会出现在 ./pkg 中
整个项目中还用到了很多依赖:
@craco/craco axios chalk express-zip github-markdown-css gm lodash luxon md5 minimist music-metadata node-disk-info piexifjs qrcode.react react-hot-toast react-i18next react-markdown react-photo-view react-rnd recoil rehype-raw remark-gfm thumbsupply
如果没有他们,我的工作量将是巨大的,十分感谢。