create-keystone-app 版本演进解析:从 v10 到 v11 的脚手架变革与实现原理
后端【免费下载链接】keystoneThe superpowered headless CMS for Node.js — built with GraphQL and React项目地址https://gitcode.com/gh_mirrors/key/keystone点击查看免费下载create-keystone-app是 Keystone 6 官方的项目脚手架 CLI执行一条命令即可生成一套开箱即用的 Headless CMS 工程含 GraphQL API 与 Admin UI 骨架。本文以该包的 CHANGELOG.md 为骨架逐版本解读 v10.0.0 到 v11.0.2 之间发生的行为变更包管理器检测、移除自动安装、纯 ESM 化等并结合 packages/create 下的实际源码与starter模板讲清脚手架每次生成的完整流程与生成物的内部结构。读完你将掌握该 CLI 的当前用法、版本演进带来的迁移注意点以及生成项目每个配置文件的作用与修改入口。create-keystone-app 是什么create-keystone-app是随 Keystone 6 一起维护的初始化工具当前仓库内版本为11.0.2。它的作用是交互式地询问目标目录然后把 packages/create/starter 中的一份可运行 starter 工程复制到该目录并给出安装依赖与启动的命令提示。包的元信息定义在 packages/create/package.jsonbin指向./cli.js即命令行可执行入口exports[.]指向构建产物dist/create-keystone-app.jspreconstruct.entrypoints声明index.ts为唯一构建入口运行时依赖仅三个enquirer交互式提问、meowCLI 参数解析、package-json拉取 npm registry 元数据做版本自检files字段说明发布包只包含dist、starter、cli.js。而 packages/create/cli.js 本身只有两行——通过import create-keystone-app引入包入口真正的逻辑全部在 packages/create/src/index.ts。一次脚手架生成的全流程基于当前源码index.ts是理解整个 CLI 的最佳入口它按顺序完成以下工作打印开场信息使用 Node 内置util.styleText高亮 Keystone 6 字样版本自检checkVersion通过package-json从 npm 拉取create-keystone-app的upstream版本与本地package.json版本比较不一致则在 stderr 提示“你正在运行旧版本请更新到 x.y.z”对应 packages/create/src/index.ts参数归一化normalizeArgs若命令行没有传入目录参数cli.input[0]为空cli由meow解析则用enquirer交互式提问What directory should create-keystone-app generate your app into?并对空输入做校验最终用path.resolve将目录解析为绝对路径packages/create/src/index.ts创建目录并复制模板fs.mkdir新建目标目录然后并行复制 8 个 starter 文件见下节检测包管理器从环境变量npm_config_user_agent推断当前使用的包管理器见“包管理器检测”小节输出后续指引打印cd 目录、包管理器 install、包管理器 run dev三步命令并提示阅读生成目录下的README.md、编辑keystone.tspackages/create/src/index.ts。入口处的meow定义了最简单的 CLI 用法这也是本文档的核心命令形态Usage $ create-keystone-app [directory]即支持create-keystone-app my-app直接指定目录或不带参数进入交互式流程。模板文件清单复制逻辑位于 packages/create/src/index.ts通过fs.copyFile将以下 8 个文件从starter复制到目标目录_gitignore复制时重命名为.gitignorestarter 源文件生成后的文件作用_gitignore.gitignore忽略 node_modules、.keystone、keystone.db 等产物schema.tsschema.ts定义 User / Post / Tag 三个列表listpackage.jsonpackage.json名为keystone-app的工程清单与 dev/build/start 脚本prisma.config.tsprisma.config.tsPrisma CLI 的 schema 与 datasource 配置tsconfig.jsontsconfig.jsonTypeScript 编译配置keystone.tskeystone.tsKeystone 配置入口db、lists、session、apolloConfigauth.tsauth.ts基于keystone-6/auth的登录与无状态会话配置README.mdREADME.md起步指引数据库切换、鉴权说明、接入前端等全部文件均可直接在 packages/create/starter 目录中查看。包管理器检测生成结束后CLI 需要提示用户用哪个包管理器安装依赖。v10.0.0 起引入了基于npm_config_user_agent的检测这也是该版本在 CHANGELOG 中被标记为 Major Changes 的原因const [packageManager] process.env.npm_config_user_agent?.split(/, 1) ?? [npm]npm_config_user_agent形如npm/9.6.7 node/v20.0.0 linux x64split(/, 1)只取第一个分隔段即包管理器名npm、pnpm、yarn等。当用户通过 npm 启动 CLI 时后续提示会输出npm install若通过 pnpm 执行则提示pnpm install——这正是“用你偏好的包管理器安装依赖”的设计落点。若环境变量缺失则回退到npm。starter 模板剖析生成的工程长什么样keystone.tsKeystone 配置入口packages/create/starter/keystone.ts 导出一个由withAuth包裹的config(...)对象包含四块关键配置db使用sqliteprovider通过prisma/adapter-better-sqlite3的PrismaBetterSqlite3适配器连接file:./keystone.db追求最快的启动体验onConnect钩子中若User表为空则用crypto.getRandomValues(new Uint8Array(16)).toHex()生成 16 字节随机密码自动创建adminexample.com初始用户并打印到控制台代码注释明确警告该逻辑仅用于开发环境不可用于生产apolloConfig.plugins注册 Apollo 插件在每次 GraphQL 请求开始时打印 operationName在遇到错误时打印错误堆栈方便开发期观察 API 行为lists从./schema.ts导入的列表定义session从./auth.ts导入的会话策略。schema.tsUser / Post / Tag 三列表packages/create/starter/schema.ts 展示了几种最常用的字段类型与关系写法同时用satisfies Lists约束类型Lists来自生成目录下./generated/keystone/typesUsername必填文本、email必填且isIndexed: unique唯一索引、password密码字段、posts一对多关系ref: Post.author、createdAtdefaultValue: { kind: now }自动记录创建时间Posttitle必填文本、content来自keystone-6/fields-document的文档字段开启formatting、links、dividers及五种分栏布局、author卡片式 UI 的关系字段many: false单作者、tags多对多关系ref: Tag.postsmany: trueTag仅name与反向posts关系并通过ui.hideNavigation在 Admin UI 导航中隐藏。三个列表的access均设为allowAll注释反复强调这是 starter 的默认开放策略生产环境务必参考访问控制指南收紧。auth.ts登录与会话packages/create/starter/auth.ts 用createAuth配置基于 email password 的认证listKey: User、identityField: email、secretField: passwordsessionData片段为name createdAt并用statelessSessions提供 cookie 无状态会话maxAge为 30 天60 * 60 * 24 * 30密钥取自process.env.SESSION_SECRET。其余配置文件packages/create/starter/package.json提供devkeystone dev、startkeystone start、buildkeystone build三个脚本packages/create/starter/prisma.config.ts供 Prisma CLI 使用schema指向schema.prismadatasource.url为file:./keystone.db——注意 Prisma CLI 与 Keystone 运行时分别从这里和keystone.ts的 adapter 读取连接切换数据库时两处都要改packages/create/starter/tsconfig.jsontarget: esnext、module: commonjs、strict: true、noEmit: true。CHANGELOG 逐版本解读v10 到 v11 的三次大变化以下所有条目均来自 packages/create/CHANGELOG.md 原文按版本顺序解读其行为影响10.0.0 —— 包管理器检测Adds support fornpm_config_user_agentfor determining your package manager这是本包进入 10.x 的第一个破坏性变更CLI 开始读取npm_config_user_agent来判断用户使用的包管理器从而在“安装依赖”的后续指引中输出与之一致的命令。其源码实现即上文“包管理器检测”小节中的一行代码。10.0.1 / 10.0.2 / 10.0.3 —— 模板与输出的修复10.0.1Update generated schemas更新生成的 schema 文件即 starter 内列表定义所对应的 GraphQL/Prisma schema 产出10.0.2Fix starter script error when looking for pre-built schemas修复 starter 脚本在查找预构建 schema 时的报错10.0.3Fix output formatting for CLI instructions修复 CLI 指引文案的输出格式。11.0.0 —— 三项重大变更这是 CHANGELOG 中信息量最大的一个版本包含三个 Major Changes移除自动安装依赖Removes auto-install, use your preferred package manager to install dependencies instead。此前 CLI 可能自动安装依赖现在不再自动安装改由用户用自己偏好的包管理器执行对应生成的指引命令npm install/pnpm install等升级keystone-app配置到最新主版本Updates the keystone-app configuration to the newest major version。即生成的工程清单starter 中名为keystone-app的 package.json当前版本 1.0.3及其配置结构升级到与新版 Keystone 兼容纯 Node ESMChanges package to exclusively Node ESM。此包改为纯 ESM 发布设计上供require(esm)使用对普通消费者而言主要影响是需要较新的 Node 版本同时明确声明keystone build的构建产物仍然是 CommonJS不影响生成项目的部署形态。当前 package.json 中type: module正是这一变更的直接体现。11.0.1 —— 对齐 UI 版本Updateskeystar/uito0.9.2to align withkeystone-6/core将keystar/ui更新到 0.9.2与keystone-6/core的依赖对齐避免 UI 组件库版本错位。11.0.2 —— 精简发布包Removes declaration maps andsrcfrom published package从发布产物中移除 declaration maps 和src目录减小 npm 包体积结合 package.json 中files字段dist、starter、cli.js可知发布包现在只保留构建产物、模板目录与 bin 入口。升级与使用注意事项综合 CHANGELOG 与当前源码使用或升级到 v11.x 时有以下几点需要留意安装依赖方式变了v11 起 CLI 生成工程后不会自动安装依赖需按提示手动执行cd 目录 你的包管理器 install随后npm run dev即keystone dev启动包管理器提示是智能的只要通过 npm/pnpm/yarn 等启动 CLI后续指引命令会自动匹配你当前使用的包管理器这依赖npm_config_user_agent环境变量Node 版本要求由于包已切换为纯 ESM 且面向require(esm)运行环境需要支持现代 Node 特性而keystone build的产物仍是 CommonJS线上部署形态不受影响数据库可平滑切换starter 默认 SQLitefile:./keystone.db如需切换 PostgreSQL需安装prisma/adapter-pg与pg在keystone.ts中用PrismaPg替换适配器并同步修改 packages/create/starter/prisma.config.ts 中的datasource.url为process.env.DATABASE_URL生产安全边界starter 中access: allowAll与onConnect自动创建初始用户的逻辑都仅面向开发体验上线前必须收紧访问控制并移除默认凭据。继续深入的相关文件CLI 全部实现packages/create/src/index.ts包元数据与发布配置packages/create/package.jsonbin 入口packages/create/cli.js生成模板目录packages/create/starter版本演进记录本文依据packages/create/CHANGELOG.md包级说明packages/create/README.md赞分享后端【免费下载链接】keystoneThe superpowered headless CMS for Node.js — built with GraphQL and React项目地址https://gitcode.com/gh_mirrors/key/keystone点击查看免费下载相关推荐Vite create-vite 版本演进深度解析从 vitejs/create-app 到多包管理器、React Compiler 支持的脚手架Vite create vite 版本演进深度解析从 vitejs/create app 到多包管理器、React Compiler 支持的脚手架 本文以前端前端构建create-tambo-app 演进史与实现原理从零配置脚手架到 Tambo 官方应用生成器create tambo app 演进史与实现原理从零配置脚手架到 Tambo 官方应用生成器 create tambo app 是 TamboGenera人工智能AI AgentAI 应用前端后端MCP 服务Tron脚本版本演变从v11到v12的7大关键改进Tron是一款强大的自动化PC清理脚本专为Windows系统优化和清理而设计。在从v11到v12的版本迭代中这款系统维护工具经历了显著的功能升级和性能优化。应用安全上一篇抖音无水印视频下载完整指南douyin-downloader一键批量获取教程下一篇Subtitle Edit终极指南如何用免费开源工具解决字幕制作的五大痛点创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考