Swagger UI 开发脚本完全指南:dev、build 与 test 全量命令详解
【免费下载链接】swagger-uiSwagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.项目地址: https://gitcode.com/GitHub_Trending/sw/swagger-ui
导读
scripts.md 是 Swagger UI 仓库的“命令总表”,它把项目日常开发、构建发布与质量保障所依赖的所有 npm script 一次性列清。本文以该文档为核心骨架,逐条解读每条命令背后的真实作用,并结合 package.json 中的 script 定义与 webpack/ 目录下的构建配置文件,解释它们调用的是哪个入口、产出哪些产物、适合在什么场景下使用。读完本文,你将能熟练地在 Swagger UI 源码仓库中运行开发服务器、按需构建任意 bundle、执行单元测试与端到端测试,并理解这些命令与底层 webpack 配置的对应关系。
运行方式与前置条件
所有脚本都通过 npm 统一入口调用,在仓库根目录下执行即可:
npm run <script name>例如启动开发服务器:
npm run dev在运行任何命令之前,需要先完成依赖安装(参考 开发环境搭建指南):
npm install仓库要求的最低运行版本为Node.js >= 24.19.0、npm >= 11.17.0,建议始终使用最新的 Node.js 版本。
开发类脚本:让迭代循环快起来
dev:带热重载的开发服务器
npm run dev这是开发 Swagger UI 本身时的主命令。从 package.json 可以看到它实际执行的是:
cross-env NODE_ENV=development BABEL_ENV=development BROWSERSLIST_ENV=browser-development webpack serve --config webpack/dev.js对应配置见 webpack/dev.js:
- 启动 webpack-dev-server,监听 3200 端口,
host设为0.0.0.0,方便在虚拟机等环境内访问; - 开启
hot: true热模块替换,并集成@pmmmwh/react-refresh-webpack-plugin,React 组件修改后页面即时刷新,无需手动刷新浏览器; minimize: false、mangle: false、sourcemaps: true,即不压缩、不混淆,并输出可读的 sourcemap,便于调试未压缩的堆栈信息;- 入口包括
swagger-ui-bundle、swagger-ui-standalone-preset、swagger-ui(样式)以及vendors(react-refresh runtime); - 静态目录指向
dev-helpers,HtmlWebpackPlugin以dev-helpers/index.html为模板生成页面。
启动成功后,浏览器打开 http://localhost:3200/ 即可看到基于 petstore 示例 渲染的界面。
切换本地 API 定义:开发时若想加载自己的本地定义,可以修改dev-helpers/dev-helper-initializer.js中的url参数,将其从远程地址替换为dev-helpers目录下的本地文件(建议放在dev-helpers/examples子目录,该目录已被.gitignore忽略):
// 修改前 url: "https://petstore.swagger.io/v2/swagger.json", // 修改后 url: "./examples/your-local-api-definition.yaml",注意:dev-helpers目录下的文件默认不应提交到 git,除非是修复index.html、oauth2-redirect.html、dev-helper-initializer.js或新增支持文件。
watch:监听源码变化并重建 dist
npm run watch该命令会在源码变化时重建dist目录下的核心文件。它的典型使用场景是配合 Swagger Editor 等外部项目:通过npm link将本仓库链接到其他项目后,watch可以持续产出最新的构建产物,让外部项目始终使用你本地最新的改动。
代码质量检查:lint 系列
| 脚本 | 实际命令 | 作用 |
|---|---|---|
lint | eslint --ext ".js,.jsx" src test dev-helpers flavors | 报告 ESLint 风格错误与警告,扫描src、test、dev-helpers、flavors四个目录 |
lint-errors | eslint --quiet --ext ".js,.jsx" src test dev-helpers flavors | 仅报告 ESLint 错误(--quiet忽略警告) |
lint-fix | eslint ... --fix | 自动修复可自动处理的风格问题 |
lint-styles | stylelint "**/*.scss" | 报告所有 SCSS 文件的 Stylelint 错误与警告 |
lint-styles-fix | stylelint "**/*.scss" --fix | 自动修复 SCSS 风格问题 |
需要说明的是,仓库的完整 lint 规则定义在 .eslintrc(未在目录树中展示的根级配置文件)与 stylelint.config.js 中。ESLint 规则同时作用于 PR 的测试序列,因此提交代码前保持 lint 通过是很重要的;如果你使用图形化编辑器,建议安装对应的 ESLint 插件,在编写代码时即时发现语法与风格问题。
deps-check:依赖体积与许可证报告
npm run deps-check该脚本串联执行两步:
run-s deps-license deps-sizedeps-license:使用license-checker将生产依赖与开发依赖的许可证信息分别导出为licenses.csv与licenses-dev.csv(输出目录由config.deps_check_dir配置为.deps_check);deps-size:以webpack -p --config webpack/bundle.js --json方式打包并导出统计信息,再经webpack-bundle-size-analyzer输出各依赖的体积分析文件sizes.txt。
用于在发布前评估依赖的体积增量与许可证合规情况。
构建类脚本:按需产出各类 bundle
构建命令通过 webpack/ 目录下多个独立配置文件驱动,公共逻辑收敛在 _config-builder.js 中——它统一处理 Babel 转译(src与node_modules/object-assign-deep内的.js/.jsx)、SVG 组件化、图片内联、UMD 输出格式、Terser 压缩与 sourcemap 策略,并注入版本号、Git commit 等信息。
build是总入口:
npm run build实际执行顺序为:先构建样式(build-stylesheets),随后用rimraf清理旧的dist/swagger-ui.js与 sourcemap,最后通过run-p并行执行下面全部 bundle 构建。
各子构建命令与产物对应关系如下:
| 脚本 | 产物 | 模块格式 | 关键配置 |
|---|---|---|---|
build-stylesheets | dist/swagger-ui.css | 样式 | webpack/stylesheets.js,SCSS → sass-loader → postcss(含 autoprefixer 与 cssnano 压缩)→ mini-css-extract-plugin |
build:bundle | dist/swagger-ui-bundle.js | UMD(commonJS) | webpack/bundle.js,入口src/index.js,library.name = SwaggerUIBundle,包含全部依赖,同时拷贝oauth2-redirect.html/js到 dist |
build:core | dist/swagger-ui.js | UMD(commonJS) | webpack/core.js,入口src/index.js,library.name = SwaggerUICore,不包含依赖(依赖需外部提供) |
build:standalone | dist/swagger-ui-standalone-preset.js | UMD(commonJS) | webpack/standalone.js,入口src/standalone/presets/standalone/index.js,library.name = SwaggerUIStandalonePreset |
build:es:bundle | dist/swagger-ui-es-bundle.js | ES2015(commonjs2 输出) | webpack/es-bundle.js,入口src/index.js,包含全部依赖 |
build:es:bundle:core | dist/swagger-ui-es-bundle-core.js | ESM(outputModule: true,libraryTarget: module) | webpack/es-bundle-core.js,入口src/index.js,不包含依赖,依赖通过 ESM externals 按需引入 |
如何选择正确的构建命令
- 只需要浏览器直接引入的完整包:
build:bundle(对应SwaggerUIBundle); - 需要按需加载依赖的最小核心包:
build:core(对应SwaggerUICore); - 需要在 Node 环境以
import方式使用 ESM 包:build:es:bundle与build:es:bundle:core; - 需要将 Swagger UI 以 React 组件方式嵌入应用:
build:standalone(对应 Standalone Layout 预设,其源码位于 src/standalone); - 仅调整样式:
build-stylesheets。
产物统一输出到dist目录,package.json的exports字段据此定义了require/import的入口映射。
测试类脚本:从单元测试到端到端测试
test:一站式全量检查
npm run test实际命令为:
run-s lint-errors test:unit cy:ci按顺序串行执行:ESLint 仅错误检查 → Jest 单元测试 → Cypress 端到端测试(CI 模式)。这是提交 PR 前推荐运行的完整校验链路。
test:unit:Jest 单元测试
npm run test:unit运行配置见 config/jest/jest.unit.config.js:
- 测试环境为
jest-environment-jsdom; - 匹配
test/unit目录下所有.js/.jsx文件(如 test/unit/components、test/unit/core 下的用例); - 通过
test/unit/jest-shim.js与test/unit/setup.js完成环境初始化,并对 SVG 文件使用jest-transform-stub打桩。
端到端测试
| 脚本 | 说明 |
|---|---|
e2e | 基于 Selenium 的端到端测试(需要 JDK 与 Selenium),场景脚本位于 test/e2e-selenium |
e2e-cypress | 使用 Cypress 的浏览器端到端测试(推荐),用例位于 test/e2e-cypress/e2e |
dev-e2e-cypress | 开发模式:启动测试服务器与 mock API,打开 Cypress 运行器,可手动挑选测试执行 |
Cypress 相关的完整链路实际由cy:*系列脚本支撑:
cy:server # 以生产模式构建并启动 webpack-dev-server(配置见 webpack/dev-e2e.js) cy:mock-api # 用 json-server 在 3204 端口提供 test/e2e-selenium/db.json 的 mock 数据 cy:start # 并行启动上述两者(run-p -r) cy:run # 无头模式运行全部 Cypress 测试 cy:open # 打开 Cypress 交互式运行器 cy:ci # start-server-and-test:等 cy:start 就绪后执行 cy:run测试配置文件见 cypress.config.js。
构建产物验证:artifact 测试
| 脚本 | 验证目标 |
|---|---|
test:artifact | 运行 config/jest/jest.artifact.config.js 定义的产物测试(匹配test/build-artifacts目录) |
test:artifact:umd:bundle | 确认swagger-ui-bundle以 Function 形式导出(UMD 形态正确) |
test:artifact:es:bundle | 确认swagger-ui-es-bundle以 Function 形式导出 |
test:artifact:es:bundle:core | 确认swagger-ui-es-bundle-core以 Function 形式导出 |
这三条 artifact 测试用于保证发布产物的导出形态正确,是构建后质量把关的最后一道闸门。
附:其他实用脚本
除了 scripts.md 列出的命令,package.json 中还提供了若干辅助脚本,可配合使用:
| 脚本 | 作用 |
|---|---|
clean | 用rimraf清空dist目录,便于干净重建 |
serve-static | 在 3002 端口静态服务dist/目录 |
start | 并行执行serve-static与open-static(自动打开浏览器) |
open-static | 通过open-cli打开 http://localhost:3002 |
security-audit | 运行npm-audit-ci-wrapper做依赖安全审计(security-audit:prod仅审计生产依赖,阈值 low;security-audit:all阈值 moderate) |
小结
Swagger UI 的脚本体系按照“开发 → 构建 → 测试”三阶段组织:开发阶段以dev的热重载与 lint 系列保证迭代效率与代码质量;构建阶段通过 6 个 webpack 配置(webpack/ 目录)产出 UMD/ESM 多种形态的 bundle 与样式文件;测试阶段则以test串联 ESLint、Jest 单元测试与 Cypress 端到端测试,并用 artifact 测试守护产物导出形态。理解这些命令与底层配置的对应关系,无论是为 Swagger UI 贡献代码,还是基于它二次开发,都能事半功倍。
【免费下载链接】swagger-uiSwagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.项目地址: https://gitcode.com/GitHub_Trending/sw/swagger-ui
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考