ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Unreleased

Unreleased Unreleased【免费下载链接】aptos-coreAptos is a layer 1 blockchain built to support the widespread use of blockchain through better technology and user experience.项目地址: https://gitcode.com/GitHub_Trending/ap/aptos-core1.1.3Regenerated code with latest codegen tooling.1.1.2Initial release.几个要点 - 顶部始终保留一个空的 ## Unreleased 区块作为下一个版本的待发布变更池 - 每个已发布版本一个 ## x.y.z 小节逐条列出变更条目用 - 列表 - 发布时把 Unreleased 重命名为目标版本号再新建一个空的 Unreleased 区块对应发布流程第 4 步 - 当前 changelog 是**手工维护**的文件头注明 This changelog is written by hand for now因此格式纪律尤为重要——遵循 Keep a Changelog 约定只记录用户可见的、有意义的行为变化而不是逐条堆砌代码提交。 ## 三、发布流程12 步全解 CONTRIBUTING.md 给出了完整的发布操作清单以下结合仓库工程细节逐步拆解。 ### 第 1 步确认待发布提交在 CI 中通过 发布来源通常是 main 分支的最新提交。在动手之前必须确认该提交在 CI 中是绿色green状态——包括 lint、测试、代码生成一致性检查等门禁。这一步杜绝了从失败状态发版的风险。 ### 第 2 步同步提升两处版本号 按 semver 规则提升版本号需要改动两个位置 - package.json 中的 version 字段 - version.ts 中的版本号。 当前仓库快照中 protos/typescript 下暂未包含 version.ts 文件发布环境或后续提交中会按流程引入因此以实际发布时的仓库状态为准。版本号必须在两处保持一致否则会出现包元数据版本与代码内暴露版本不一致的问题。当前包的版本为 1.1.3[package.json](https://link.gitcode.com/i/0bff076fc2510113db84d41104a0841a) 中对应的 semver 决策依据是破坏性变更升 major、新增功能升 minor、向后兼容的修复与重新生成升 patch。 ### 第 3 步按 Keep a Changelog 规范添加版本条目 把 CHANGELOG 中 Unreleased 区块改名为目标版本号并新建一个空的 Unreleased 区块详见上一节。 ### 第 4 步PR 合入 main 将上述版本号 CHANGELOG 的改动以 PR 形式提交等 CI 再次通过后合入 main 分支。这保证了发版基线是可复现的。 ### 第 5 步签出 main 最新提交 bash git checkout main git pull确保本地处于main的最新提交避免基于过期代码发布。第 6 步获取 npm 发布令牌从团队的密码管理器password manager中检索 npmjs 的认证令牌形如npm_cccaCVg0bWaaR741D5Gdsd12T4JpQre444aaaa这是pnpm publish推送包到 npm registry 所需的NODE_AUTH_TOKEN。令牌本身是敏感凭据不应提交到仓库或日志中。第 7 步pnpm publish --dry-run预检发布前必须做一次干跑检查打包内容是否干净pnpm publish --dry-run需要关注两点原文要求a. 仔细检查打包输出确认没有把意外文件打进包里。原文特别举例.aptos目录——这类本地生成物一旦混入发布包会污染包体、引入不一致的缓存数据。如有需要把这类路径加入.npmignore。b. 与 npmjs 上的公开包对比对照已发布的包摘要文件数量与整体大小不应出现明显漂移。差异过大通常意味着打包配置被意外改动。补充说明当前仓库的 package.json 采用了更现代的白名单机制——files: [dist]即发布时只包含dist构建产物目录从源头排除了源码、测试与本地杂物。files白名单与.npmignore黑名单是互补关系白名单优先生效.npmignore则用于在白名单命中后继续剔除特定文件。当前仓库尚未创建.npmignore在protos/typescript目录下未检索到该文件这正说明白名单策略已足够收敛但流程文档保留了对.npmignore的补充路径。第 8 步pnpm build构建发布产物执行构建生成dist目录下的双格式产物。这一步的细节见下一节核心是同时产出 CommonJS 与 ES Module 两套代码。第 9 步携带令牌正式发布NODE_AUTH_TOKENtoken pnpm publish --non-interactiveNODE_AUTH_TOKEN环境变量向 pnpm/npm 提供第 6 步获取的凭据--non-interactive禁止发布过程中弹出交互式提问保证 CI 化、脚本化的可重复执行不指定版本号时pnpm 会读取package.json中已提升的version字段。第 10 步验证发布结果发布完成后前往 npmjs 上aptos-protos包页面核对最新版本号、文件清单与体积是否符合预期。也可以在第 7 步的 dry-run 摘要和本次实际发布日志之间做交叉比对。四、构建细节一次构建CJS/ESM 双产物pnpm build实际执行的是 scripts/build.sh全脚本只有 8 行却完整解决了一份 TypeScript 源码、两套模块格式、下游正确识别的工程问题# Build the commonjs code. We include a package.json with the type set to commonjs # so the downstream code knows that it is commonjs and not esm. tsc --module commonjs --outDir dist/cjs echo {type: commonjs} dist/cjs/package.json # Build the esm code. We include a package.json with the type set to esm # so the downstream code knows that it is esm and not commonjs. tsc --module es2022 --outDir dist/esm echo {type: module} dist/esm/package.json逐行解读第一次tsc以--module commonjs编译到dist/cjs在dist/cjs内写入{type: commonjs}的 package.json 标记让 Node 把该目录下的产物按 CommonJS 解析第二次tsc以--module es2022编译到dist/esm在dist/esm内写入{type: module}标记让该目录按 ES Module 解析。这个目录内嵌套 package.json 标记类型的技巧避免了根 package.json 中type: module带来的单格式限制使同一份代码可以被 CommonJS 与 ESM 两类消费者同时使用。与之配套的入口声明是main: ./dist/cjs/index.js——CJS 消费者require入口module: ./dist/esm/index.js——打包器与 ESM 消费者入口types: ./dist/esm/index.d.ts——类型声明export字段进一步细分require/import/types三个条件导出。tsconfig.json 中moduleResolution: node、target: es2021、strict: true、declaration: true、sourceMap: true等配置与build.sh的命令行参数协同生效编译时src/**/*.ts被包含、node_modules被排除。此外package.json 还定义了prepare钩子rm -rf dist pnpm run build在pnpm install等触发prepare的场景自动重建产物保证本地开发与发布使用同一份构建逻辑。包的运行时环境要求为 Node22.0.0包管理器固定为pnpm10.33.2packageManager字段发布命令统一走 pnpm。五、消费方视角如何使用该包README.md 给出了最小可用示例。安装依赖后按命名空间导入import { aptos } from aptos-labs/aptos-protos;随后直接使用生成类型例如解析一条链上交易function parse(transaction: aptos.transaction.v1.Transaction) { console.log(transaction) }类型检查要求消费者的 tsconfig.json 配置moduleResolution: node即{ compilerOptions: { moduleResolution: node } }【免费下载链接】aptos-coreAptos is a layer 1 blockchain built to support the widespread use of blockchain through better technology and user experience.项目地址: https://gitcode.com/GitHub_Trending/ap/aptos-core创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进