VTJ.PRO 在线应用开发平台的构建与发布脚本

构建与发布脚本

本文档详细介绍了位于 scripts/ 目录下的自动化脚本。这些工具用于管理 VTJ.PRO 平台的整个生命周期,包括项目模板打包、环境清理,以及为"完整版"和"云版"两种部署变体生成可用于生产的发布产物。

发布变体:完整版 vs. 云版

构建系统区分了两种主要的发行类型,以适应不同的部署场景。两种变体都会被打包成ZIP压缩包,存放在 _releases 目录下,该目录已被版本控制系统排除。

变体 用途 主要特征
完整版 (vtj-pro-full) 自托管、离线或独立部署 包含所有源代码、后端服务、前端资源及本地依赖。
云版 (vtj-pro-cloud) 托管式或云原生部署 针对特定基础设施(如 OSS 或共享服务)由外部管理的环境进行了优化。

脚本: publish.mjs

publish.mjs 脚本是主要的发布包生成器。它负责从单体仓库中收集文件,应用排除规则移除开发工件,并将结果压缩成带版本号的ZIP文件。

实现细节

该脚本使用 archiver 进行压缩,使用 fs-extra 进行文件系统操作。它定义了一组全局排除规则,以确保发布的产物轻量且安全。

关键排除规则: 打包过程中会忽略以下模式:

  • 开发元数据: .git, .vscode, .idea, .history
  • 构建产物: node_modules, dist (生产环境的前端/后端输出除外), _releases
  • 临时文件: *.log, package-lock.json, pnpm-lock.yaml
  • 环境特定文件: .env.local, .DS_Store
发布工作流逻辑

脚本遵循线性执行路径来构建发布包:

  1. 版本解析 :从根目录的 package.json 中读取当前版本。
  2. 目录准备 :确保 _releases 目录存在。
  3. 归档初始化 :为目标ZIP文件(例如 vtj-pro-full-v1.0.0.zip)创建一个写入流。
  4. 文件聚合 :递归遍历目录树,应用 ignore 过滤器跳过仅用于开发的文件。
发布流程

下图展示了从单体仓库源代码到最终发布产物的数据流。

发布打包架构

flowchart subgraph Source Workspace ROOT[Root Directory] FE["/frontend/dist"] BE["/backend/dist"] TMPL["/templates"] DOCS["/_docs"] end subgraph publish.mjs Logic FILTER["ignore() filter"] ARCHIVE["archiver (zip)"] end subgraph Output FULL[_releases/vtj-pro-full-vX.zip] CLOUD[_releases/vtj-pro-cloud-vX.zip] end ROOT --> FILTER FE --> FILTER BE --> FILTER TMPL --> FILTER DOCS --> FILTER FILTER -- "Exclude .git, node_modules, etc." --> ARCHIVE ARCHIVE --> FULL ARCHIVE --> CLOUD

脚本: template.mjs

template.mjs 脚本负责打包位于 templates/ 目录下的入门项目模板(Web、H5 和 UniApp)。这些模板对于低代码引擎初始化新用户项目至关重要。

实现与数据流

该脚本执行两个主要功能:

  1. 内部同步 :打包模板并将其放置到 backend/zip/ 目录下。这使得 NestJS 后端可以在项目创建过程中通过 TemplateModule 提供这些模板。
  2. 外部发布 :将模板打包到根目录下的 zip/ 目录中,用于手动分发或 CLI 工具使用。

模板打包流程

flowchart subgraph Template Sources T1["/templates/web"] T2["/templates/h5"] T3["/templates/uniapp"] end subgraph template.mjs ZIP_EXEC["zipTask(name, source)"] end subgraph Destinations BE_ZIP["/backend/zip/*.zip"] ROOT_ZIP["/zip/*.zi"p] end T1 --> ZIP_EXEC T2 --> ZIP_EXEC T3 --> ZIP_EXEC ZIP_EXEC --> BE_ZIP ZIP_EXEC --> ROOT_ZIP

脚本: clean.mjs

clean.mjs 脚本提供了一个用于重置开发环境的实用工具。它的目标是那些在构建和执行过程中经常被填充但不应持久存在的目录。

目标目录

该脚本会以编程方式删除以下路径:

  • node_modules/:根目录及各个包的依赖。
  • dist/:前端和后端的编译输出。
  • _releases/:先前生成的发布包。
  • uploadfiles/:上传资产的临时或本地存储。

配置与环境

这些脚本依赖于项目的工作区配置,以便在不同的环境中正确运行。

工作区依赖提升

该项目使用 pnpm,并通过 .npmrc 文件定义了特定的依赖提升规则,以确保构建脚本能够访问必要的依赖项(如 archiverfs-extra),而无需在每个子包中都安装它们。

配置项 用途
hoist true 启用依赖提升,将依赖提升到根目录的 node_modules
node-linker hoisted 使用扁平的 node_modules 结构,以兼容标准的 Node.js 脚本。
registry https://registry.npmmirror.com 配置镜像源,以加快构建过程中的依赖解析速度。

参考资料

相关推荐
leafyyuki3 分钟前
从零到一落地「智能助手」:一次基于 OpenSpec 的流式对话前端实践
前端·vue.js·人工智能
踩着两条虫5 分钟前
VTJ:架构设计模式
前端·架构·ai编程
码路飞9 分钟前
这周 AI 圈连炸两次:我把 Kimi K2.6 和 Claude Opus 4.7 都接进 OpenClaw 试了一遍
ai编程·claude
nebula-AI12 分钟前
llm wiki的固定提示词
人工智能·ai·个人开发·ai编程
好多渔鱼好多14 分钟前
【AI编程工具】华为CodeArts Snap 极速上手指南:从安装到高效编码
ai编程·华为snap
AI技术社区21 分钟前
Claude Code源码分析之提示词工程
java·开发语言·ai·ai编程
invicinble29 分钟前
前端技术栈--vuecli页面固定思路解密,与vue-router技术栈信息
前端·javascript·vue.js
好多渔鱼好多31 分钟前
【AI编程工具】华为CodeArts Snap 实战进阶:从后端接口生成到鸿蒙 ArkTS 深度适配
ai编程·华为snap
六月的可乐43 分钟前
快速搭建 AI 客服系统:用 AI-Agent-Node + AISuspendedBallChat 打造可落地的智能客服方案
人工智能·gpt·ai·ai编程
Mr -老鬼1 小时前
EasyClick iOS版 CLI 与 Trae iOS版智能体
ios·自动化·ai编程·tare·ec·easyclick·易点云测