Skip to content

构建系统和工具

OpenLayers 使用基于 npm scripts 和现代 JavaScript 工具的综合构建系统,将 TypeScript 源代码转换为可分发包。该系统处理转译、捆绑、类型生成、测试和开发工作流程自动化。

构建管线架构

构建管线通过 package.json 中定义的 npm 脚本,将源文件转换通过多个阶段。管线处理 TypeScript 编译、模块捆绑和包准备。

构建管线流程

SVG
100%

核心构建脚本

构建系统使用协调文件操作、转译和捆绑的 npm 脚本:

脚本命令目的
transpileshx rm -rf build/ol && shx mkdir -p build/ol && shx cp -rf src/ol build && node tasks/serialize-workers.cjs && node tasks/set-version.js准备源文件,处理 workers,设置版本
build-indexshx rm -f build/index.js && npm run transpile && node tasks/generate-index.js创建主模块入口点
build-fullshx rm -rf build/full && npm run build-index && npx rollup --config config/rollup-full-build.js使用 Rollup 捆绑库
copy-cssshx cp src/ol/ol.css build/ol/ol.css复制 CSS 样式表
generate-typestsc --project config/tsconfig-build.json --declaration --declarationMap --emitDeclarationOnly --outdir build/ol生成 TypeScript 声明
build-packagenpm run build-full && npm run copy-css && npm run generate-types && node tasks/prepare-package.js组装最终分发包

构建过程步骤

1. 转译 (transpile)

此初始步骤准备源文件以进行进一步处理:

  • 清理 build/ol 目录
  • 创建必要的目录
  • 将源文件从 src/ol 复制到 build
  • 通过 serialize-workers.cjs 处理 web worker 文件
  • 通过 set-version.js 设置版本信息

2. 索引生成 (build-index)

此步骤创建主入口点:

  • 删除任何现有的 build/index.js
  • 确保转译完成
  • 使用 generate-index.js 从转译的源生成索引文件

3. 完整构建 (build-full)

此步骤创建库的捆绑版本:

  • 清理 build/full 目录
  • 确保生成索引
  • 使用 Rollup 创建包含所有依赖项的捆绑版本

4. 类型生成 (generate-types)

此步骤创建 TypeScript 声明文件:

  • 使用具有特定配置的 TypeScript 编译器
  • 生成 .d.ts.d.ts.map 文件
  • 输出到 build/ol 目录

5. 包创建 (build-package)

此最后一步创建完整的分发包:

  • 确保完整构建完成
  • 将 CSS 文件复制到构建目录
  • 确保生成类型声明
  • 通过 prepare-package.js 准备最终包以供分发

依赖管理

OpenLayers 仅使用五个生产依赖项维持最小的运行时占用空间,同时使用广泛的开发工具链进行构建、测试和开发。

运行时依赖

SVG
100%

开发工具链依赖

类别关键依赖目的
构建工具rollup@^4.1.4, typescript@5.8.3, webpack@^5.27.2模块捆绑和编译
测试karma@^6.3.8, mocha@11.7.1, puppeteer@24.16.1浏览器和 Node.js 测试
代码质量eslint@^9.16.0, eslint-config-openlayers@^20.0.0Linting 和样式强制
文档jsdoc@4.0.4, metalsmith@^2.5.0, marked@16.1.2API 文档和示例
开发webpack-dev-server@^5.0.2, express@^5.1.0开发服务器

测试基础设施

OpenLayers 实现了多层测试策略,涵盖代码质量、类型安全、单元测试、集成测试和视觉回归测试。

测试管线

SVG
100%

Karma 浏览器测试配置

浏览器测试环境使用 Karma 与复杂的 webpack 集成:

SVG
100%

测试类别

测试类型运行器配置目的
LintingESLinteslint-config-openlayers代码样式和质量
类型检查TypeScripttsconfig.json、config/tsconfig-strict.json类型安全
单元测试Karma + Mochatest/browser/karma.config.cjs浏览器兼容性
Node 测试Mochatest/node/服务器端功能
视觉测试自定义test/rendering/渲染准确性

开发工作流程

OpenLayers 为不同的开发场景提供专用 npm 脚本,从核心库开发到示例和文档。

开发服务器设置

SVG
100%

核心开发工作流程

工作流程命令目的
库开发npm run transpile → npm test → npm run build-package核心库更改
示例开发npm start → 编辑 → 刷新浏览器交互式示例
API 文档npm run apidoc生成文档
完整发布构建npm run build-package分发准备

示例开发过程

示例系统为开发提供即时反馈:

  1. 启动开发服务器npm start 启动具有热重新加载的 webpack-dev-server
  2. 实时开发:对示例代码的更改会自动刷新浏览器
  3. 生产构建npm run build-examplesbuild/examples/ 中创建优化的示例

构建输出

构建过程创建这些输出:

输出位置描述
转译源代码build/ol/处理的源文件
索引文件build/index.js主入口点
完整构建build/full/捆绑的库
TypeScript 声明build/ol/*.d.ts类型定义
CSSbuild/ol/ol.css样式表
build/完整分发包

API 文档生成

OpenLayers 还包括用于生成 API 文档的脚本:

脚本目的
apidoc使用 JSDoc 生成 API 文档
apidoc-debug生成启用调试的 API 文档

这些脚本使用 JSDoc 和自定义配置从源代码注释生成文档。

示例构建

示例系统有专用的构建脚本:

脚本目的
serve-examples启动用于示例的 webpack dev 服务器
build-examples为生产构建示例

示例使用 webpack 进行捆绑和开发服务。