ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

CesiumJS 构建产物 IIFE、ESM 与 CJS 三种发行格式怎么选?

CesiumJS 构建产物 IIFE、ESM 与 CJS 三种发行格式怎么选? CesiumJS 构建产物 IIFE、ESM 与 CJS 三种发行格式怎么选【免费下载链接】cesiumAn open-source JavaScript library for world-class 3D globes and maps :earth_americas:项目地址: https://gitcode.com/GitHub_Trending/ce/cesium把 CesiumJS 接入自己的项目时第一个决定往往是用哪种发行格式。CesiumJS 同时提供 IIFE、ESM 和 CJS 三种形式各自对应不同的运行时环境和构建工具。本文依据仓库中的 构建指南、README 以及 package.json、index.cjs 的实际内容说明三种格式的适用条件、官方选型建议、本地构建方式和各自的接入写法帮助你在集成或迁移时选对入口。三种格式分别是什么、适用在哪里构建指南在 Build Output 一节明确列出了三种发行形式核心区别在于加载方式和目标环境格式入口与产物加载方式适用环境IIFE预处理后的整体 bundleweb worker 代码内联加载Build/Cesium/Cesium.js压缩版或Build/CesiumUnminified/Cesium.js未压缩版script标签或 CDN加载后定义全局Cesium变量浏览器ESM未处理的单个模块位于Source目录入口Source/Cesium.js或预处理后的单文件 bundleBuild/Cesium/index.jsimport/export大多数浏览器和 NodeJS配合打包工具使用CJS预处理、打包完成的 Node 专用模块require(index.cjs)NodeJS官方对选型的态度在文档中写得很直接文档示例大量使用 IIFE因为它可以通过 CDN 轻松加载、并定义带全部模块的全局Cesium变量但构建指南明确写着we do not recommend this approach for production apps不推荐用于生产应用。对生产应用官方建议直接使用Source目录下的模块让你选择的构建工具通过 tree shaking 缩减最终发布体积。CJS 面向 NodeJS 场景是一个打包好的模块。由此可以得出最短决策路径有打包工具的浏览器应用选 ESMSource模块纯 Node 环境选 CJSIIFE 用于无构建的简单页面、CDN 引入或快速验证。本地构建三种产物如果你是从仓库源码集成或者需要控制构建选项按下述步骤执行。构建 Cesium 要求 Node 22.x 或更高版本package.json 中engines.node为22.0.0。npm install npm run buildbuild是一次面向开发者的快速构建把源模块打包成整体文件输出到Build/CesiumUnminified目录整个 Cesium API 挂在全局Cesium对象上。它支持以下选项--minify—— 压缩输出以优化加载指定后输出目录改为Build/Cesium。--removePragmas—— 移除用于校验函数入参并抛出DeveloperError的调试代码对应源码中以//includeStart(debug, pragmas.debug);标记的代码块。--node—— 额外打包一个供 NodeJS 使用的index.cjs模块。构建完成的验证方式确认输出目录已生成——build对应Build/CesiumUnminified加--minify时对应Build/Cesium。运行开发服务器并查看落地页npm start浏览器打开http://localhost:8080/落地页列出开发常用入口包括 Hello World创建 3D 地球的示例、Sandcastle、Test Suites 和 Documentation。开发过程中如果修改了 GLSL shader 文件需要重新执行build任务因为.glsl文件会被转换为内嵌 GLSL 源码字符串的.js文件。用npm run build-watch可以让文件变化时自动重建clean脚本则用于移除所有生成的构建产物。三种格式的接入写法ESM打包工具项目的主路径适用于使用 Webpack、Parcel、Rollup 等模块打包工具的应用。安装 npm 包后按模块导入npm install cesium --saveimport { Viewer } from cesium; import cesium/Build/Cesium/Widgets/widgets.css; const viewer new Viewer(cesiumContainer);README 强调导入单个模块可以让大多数构建工具做 tree shaking 优化上面的widgets.css导入用于加载组件样式。Node 侧如何区分两种格式由 package.json 的exports字段决定exports: { .: { types: ./Source/Cesium.d.ts, require: ./index.cjs, import: ./Source/Cesium.js } }也就是说import cesium走 ESM 入口Source/Cesium.jsrequire(cesium)走 CJS 入口index.cjsmain字段同样指向index.cjsmodule字段指向./Source/Cesium.js。此外 CesiumJS 还以cesium/engine核心、渲染与数据 API和cesium/widgets组件库两个 scope 包分发用于更细粒度的依赖管理。IIFE无构建工具或 CDN 场景仓库自带的 Apps/HelloWorld.html 就是 IIFE 用法的完整示例它引用构建产物并用全局变量创建 Viewerscript src../Build/CesiumUnminified/Cesium.js/script script const viewer new Cesium.Viewer(cesiumContainer); /script按构建指南的说法加载Build/Cesium/Cesium.js后即定义了全局Cesium变量这也是该格式可以通过 CDN 直接引入的原因。生产环境中该格式不推荐见上节官方态度但用于本地验证、原型演示和文档风格的全局用法是合适的。CJSNodeJS 环境Node 场景下通过require仓库根的index.cjs加载。查看 index.cjs 源码可以看到它如何区分压缩版与未压缩版use strict; const path require(path); const minified path.join(__dirname, Build/Cesium/index.cjs); const unminified path.join(__dirname, Build/CesiumUnminified/index.cjs); // If in production mode, use the combined/minified/optimized version of Cesium module.exports process.env.NODE_ENV production ? require(minified) : require(unminified);即NODE_ENVproduction时加载压缩优化的Build/Cesium/index.cjs否则加载Build/CesiumUnminified/index.cjs。两个文件都由构建产生其中 Node 版本对应build任务的--node选项。限制与发布相关说明IIFE 不适合作为生产应用的引入方式这是构建指南的明确结论生产应用应走 ESM Source模块以获得 tree shaking。修改 GLSL shader 后必须重跑build才能生效.glsl会转成.js否则改动不会反映到产物中。完整发布构建使用release脚本它执行buildRelease同时生成未压缩与压缩的 Node 版本并构建 TypeScript 定义文件和文档make-zip则打包出包含源 ESM 模块、bundled ESM 与 IIFE 格式Cesium.js及其压缩版、生成的文档、测试套件和示例应用的发布 zip 文件。发布产物的内容边界以这两个脚本的文档说明为准。构建任务由 gulp 驱动但都通过npm run [target-name]暴露不需要单独配置 gulp 命令行。选完格式并接入后验证入口就两条浏览器应用按所选格式加载后确认Viewer能正常创建ESM 走模块导入IIFE 走全局CesiumNode 应用确认require(cesium)解析到index.cjs并返回预期模块。产物目录与脚本行为均以 构建指南 和 gulpfile.js 中的定义为准。【免费下载链接】cesiumAn open-source JavaScript library for world-class 3D globes and maps :earth_americas:项目地址: https://gitcode.com/GitHub_Trending/ce/cesium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表