接入指南
环境要求
在开始集成 SDK 前,请确保开发环境满足以下要求,以保证引擎功能正常运行:
- 浏览器支持:
- 基础 ES Module 引入:Chrome 61+、Edge 61+、Firefox 60+、Safari 15.0+
- 结合 Import Maps 引入:Chrome 89+、Edge 89+、Firefox 108+、Safari 15.4+
- 开发工具:
- 原生集成:无需构建工具,直接通过浏览器运行
- 构建工具集成:支持 ESM 模块的构建工具(如 Vite 4.0+、Webpack 5.0+、Rollup 2.0+ 等)
- 依赖说明:
- SDK 已包含自身样式,无需单独导入样式文件
现代浏览器原生集成
基础 ESM 方式
基础 ESM 方式是现代浏览器中最直接的集成方式,通过完整的 CDN 路径直接引入 ESM 模块,无需任何额外配置。该方式的优势是简单直观,无需理解模块映射规则,适合快速上手或场景简单的项目。
详细步骤:
- 创建 HTML 基础结构
首先创建一个标准的 HTML 文件,在
<head>标签中引入 SDK 的样式文件,在<body>标签中定义用于承载 BIM 场景的容器:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>基础 ESM 方式示例</title>
<!-- 引入 SDK 样式文件,确保场景UI正常显示 -->
<link rel="stylesheet" href="https://cdn.dtbim.cn/SDK/latest/sdk.css" >
</head>
<body>
<!-- 场景容器:宽高设置为占满整个视口 -->
<div id="app" style="width: 100vw; height: 100vh; margin: 0; padding: 0; overflow: hidden;"></div>
</body>
</html>
- 引入并初始化 SDK
在
<body>标签末尾添加<script type="module">标签,通过完整 CDN 路径引入 SDK 和 UI 组件,并初始化场景:
<script type="module">
// 从 CDN 加载完整的 SDK 模块,通过命名空间 bimflux 访问所有功能
import * as bimflux from "https://cdn.dtbim.cn/SDK/latest/sdk.es.js";
// 引入 UI 组件,组件会自动注册到全局
import "https://cdn.dtbim.cn/ui-next/latest/index.js";
// 等待页面 DOM 加载完成后初始化场景
document.addEventListener("DOMContentLoaded", () => {
// 初始化场景核心实例
const scene = new bimflux.Scene("app");
});
</script>
Import Maps 方式
Import Maps 是现代浏览器原生支持的模块映射机制,允许开发者为模块定义别名,从而简化导入路径。这种方式适合需要引入多个模块、或希望代码更简洁易维护的场景,尤其在大型原生项目中能显著提升代码可读性。
详细步骤
- 创建 HTML 结构并配置 Import Maps
在
<head>标签中添加<script type="importmap">标签,定义 SDK 和 UI 组件的别名,同时引入 SDK 样式文件:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Import Maps 方式示例</title>
<!-- 配置 Import Maps:定义模块别名与实际路径的映射关系 -->
<script type="importmap">
{
"imports": {
// 为 SDK 定义别名
"@bimflux/sdk": "https://cdn.dtbim.cn/SDK/latest/sdk.es.js",
// 为 UI 组件定义别名
"@bimflux/ui": "https://cdn.dtbim.cn/ui-next/latest/index.js"
}
}
</script>
<!-- 引入 SDK 样式文件 -->
<link rel="stylesheet" href="https://cdn.dtbim.cn/SDK/latest/sdk.css" >
</head>
<body>
<!-- 场景容器:宽高设置为占满整个视口 -->
<div id="app" style="width: 100vw; height: 100vh; margin: 0; padding: 0; overflow: hidden;"></div>
</body>
</html>
- 通过别名引入并初始化 SDK
在
<script type="module">标签中,使用 Import Maps 定义的别名替代完整 CDN 路径,简化导入代码:
<script type="module">
// 通过别名全量引入 SDK
import * as bimflux from "@bimflux/sdk";
// 通过别名引入 UI 组件
import "@bimflux/ui";
// 等待页面 DOM 加载完成后初始化场景
document.addEventListener("DOMContentLoaded", () => {
// 初始化场景核心实例
const scene = new bimflux.Scene("app");
});
</script>
构建工具集成
对于中大型项目或需要复杂工程化管理的场景,推荐使用构建工具集成 SDK。构建工具能提供模块打包、代码压缩、环境变量管理等功能,同时支持通过别名简化导入路径,提升开发效率。
Vite 集成
Vite 是一款基于 ESM 的前端构建工具,对原生 ESM 支持友好,无需额外配置即可直接导入远程 CDN 模块,适合快速开发现代前端项目。
详细步骤:
- 创建 Vite 项目(若未创建) 打开终端,执行以下命令创建一个基础 Vite 项目(以 Vue 模板为例,也可选择 React/Vanilla 等框架模板):
# 创建项目
npm create vite@latest bimflux-vite-project -- --template vue
# 进入项目目录
cd bimflux-vite-project
# 安装依赖
npm install
- 配置 Vite 别名(可选但推荐)
为简化导入路径,修改项目根目录下的
vite.config.js文件,添加 bimflux 模块的别名配置:
// vite.config.js
import { defineConfig } from "vite";
export default defineConfig({
// 模块解析配置:定义别名
resolve: {
alias: {
// 为 SDK 配置别名
"@bimflux/sdk": "https://cdn.dtbim.cn/SDK/latest/sdk.es.js",
// 为 UI 组件配置别名
"@bimflux/ui": "https://cdn.dtbim.cn/ui-next/latest/index.js",
// 为 SDK 样式文件配置别名
"@bimflux/style": "https://cdn.dtbim.cn/SDK/latest/sdk.css"
}
}
});
- 修改 HTML 模板
编辑项目根目录下的
index.html,引入项目入口脚本:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" type="image/svg+xml" href="/vite.svg">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vite + bimflux</title>
</head>
<body>
<!-- 场景容器:宽高设置为占满整个视口 -->
<div id="app" style="width: 100vw; height: 100vh; margin: 0; padding: 0; overflow: hidden;"></div>
<!-- 引入项目入口脚本 -->
<script type="module" src="/src/main.js"></script>
</body>
</html>
- 引入并初始化 SDK
编辑
src/main.js文件,通过别名(或完整路径)引入 SDK 并初始化:
// src/main.js
// 引入 SDK(通过别名)
import * as bimflux from "@bimflux/sdk";
// 引入 UI 组件(通过别名)
import "@bimflux/ui";
// 引入 SDK 样式文件(通过别名)
import "@bimflux/style";
// 等待页面 DOM 加载完成后初始化场景
document.addEventListener("DOMContentLoaded", () => {
// 初始化场景核心实例
const scene = new bimflux.Scene("app");
});
Webpack 集成
Webpack 是一款功能全面的前端构建工具,支持处理各种资源和模块类型,适合复杂项目的工程化管理。Webpack 5+ 对 ESM 模块支持完善,可直接导入远程 CDN 模块。
详细步骤:
- 创建 Webpack 项目(若未创建) 打开终端,执行以下命令初始化项目并安装 Webpack 相关依赖:
# 创建项目目录并进入
mkdir bimflux-webpack-project && cd bimflux-webpack-project
# 初始化 npm 项目
npm init -y
# 安装 Webpack 核心依赖
npm install webpack webpack-cli webpack-dev-server --save-dev
# 安装 HTML 插件和样式加载器
npm install html-webpack-plugin style-loader css-loader --save-dev
- 配置 Webpack
在项目根目录创建
webpack.config.js文件,配置入口、出口、模块解析规则及插件:
// webpack.config.js
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
// 入口文件
entry: "./src/main.js",
// 模块处理规则
module: {
rules: [
// 处理 CSS 文件(用于加载 SDK 样式)
{
test: /\.css$/,
use: [
"style-loader", // 将 CSS 注入到 DOM 中
"css-loader" // 解析 CSS 文件
],
// 允许加载 CDN 中的 CSS 文件
include: (modulePath) => {
return modulePath.includes("cdn.dtbim.cn") || modulePath.includes("src");
}
}
]
},
// 模块解析配置
resolve: {
// 配置别名
alias: {
"@bimflux/sdk": "https://cdn.dtbim.cn/SDK/latest/sdk.es.js",
"@bimflux/ui": "https://cdn.dtbim.cn/ui-next/latest/index.js",
"@bimflux/style": "https://cdn.dtbim.cn/SDK/latest/sdk.css"
},
// 支持的文件扩展名
extensions: [".js"]
},
// 插件配置
plugins: [
// 生成 HTML 文件并自动注入打包后的脚本
new HtmlWebpackPlugin({
template: "./public/index.html", // HTML 模板路径
title: "Webpack 集成示例" // 页面标题
})
],
// 模式:开发环境(开发环境不压缩代码,保留调试信息)
mode: "development"
};
- 创建 HTML 模板
在项目根目录创建
public文件夹,新建index.html作为模板:
<!-- public/index.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<!-- BIM 场景容器:ID 为 "app" -->
<div id="app" style="width: 100vw; height: 100vh; margin: 0; padding: 0; overflow: hidden;"></div>
</body>
</html>
- 引入并初始化 SDK
在项目根目录创建
src文件夹,新建main.js作为入口文件:
// src/main.js
// 引入 SDK(通过别名)
import * as bimflux from "@bimflux/sdk";
// 引入 UI 组件(通过别名)
import "@bimflux/ui";
// 引入 SDK 样式文件(通过别名)
import "@bimflux/style";
// 等待 DOM 加载完成后初始化场景
document.addEventListener("DOMContentLoaded", () => {
// 初始化场景核心实例
const scene = new bimflux.Scene("app");
});
自定义 Loader 集成
对于需要高度定制化加载逻辑或特殊网络环境的场景,可以使用自定义 Loader 方式集成 SDK。这种方式允许开发者完全控制 SDK 的加载过程,包括错误重试、加载进度显示、条件加载等功能。
详细步骤:
- 创建自定义 Loader 函数 在项目中创建一个自定义 Loader 函数,封装 SDK 的加载逻辑:
// utils/bimfluxLoader.js
export const useBimfluxLoader = async () => {
return new Promise((resolve, reject) => {
// 对于webpack 项目,可添加 webpackIgnore 注释避免 webpack 处理该导入
import(/* webpackIgnore: true */ "https://cdn.dtbim.cn/SDK/latest/sdk.es.js")
.then((module) => {
resolve(module);
})
.catch((error) => {
// 处理加载失败
console.error("bimflux SDK 加载失败:", error);
reject(error);
});
});
};
- 在主应用中使用自定义 Loader 在应用中使用自定义 Loader 函数加载 SDK:
// main.js
import { useBimfluxLoader } from './utils/bimfluxLoader';
useBimfluxLoader()
.then((bimflux) => {
// 等待 DOM 加载完成后初始化场景
document.addEventListener("DOMContentLoaded", () => {
// 初始化场景核心实例
const scene = new bimflux.Scene("app");
// 其他初始化代码...
});
})
.catch((error) => {
console.error('BIM 引擎加载失败:', error);
});
兼容性处理
由于 bimflux SDK 基于现代 Web 标准开发,在旧浏览器中可能存在兼容性问题。以下针对不同兼容性场景提供解决方案:
ESM 兼容性处理
不支持 ESM 的浏览器:
- Internet Explorer(所有版本)
- Chrome < 61、Edge < 61、Firefox < 60、Safari < 10.1
解决方案一:浏览器检测与降级提示
通过 type="module" 和 nomodule 标签区分浏览器,对不支持 ESM 的浏览器显示友好提示,引导用户升级:
<!-- 支持 ESM 的浏览器会执行此脚本 -->
<script type="module">
console.log("当前浏览器支持 ESM,可正常运行 SDK");
</script>
<!-- 不支持 ESM 的浏览器会执行此脚本 -->
<script nomodule>
(function() {
// 获取场景容器并替换为提示信息
const container = document.getElementById("app");
if (container) {
container.innerHTML = `
<div style="width: 100%; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; color: #e53e3e; font-family: sans-serif; padding: 2rem; text-align: center;">
<h3>浏览器版本过低</h3>
<p>请升级浏览器后使用(Chrome 61+/Edge 61+/Firefox 60+/Safari 10.1+)</p>
</div>
`;
}
})();
</script>
解决方案二:使用 ESM 垫片**
对于支持部分 ES6+ 语法但不支持 ESM 的浏览器,可使用 es-module-shims 库模拟 ESM 加载逻辑,使模块能正常导入:
<!-- 引入 ESM 垫片(需放在模块引入前) -->
<script async src="https://unpkg.com/es-module-shims@1.10.0/dist/es-module-shims.js"></script>
<!-- 正常引入 sdk 模块 -->
<script type="module">
import * as bimflux from "https://cdn.dtbim.cn/SDK/latest/sdk.es.js";
// 初始化代码...
</script>
Import Maps 兼容性处理
不支持 Import Maps 的浏览器:
- Chrome < 89、Firefox < 108、Safari < 15.4、Edge < 89
解决方案:使用 Import Maps 垫片
es-module-shims 库同时支持模拟 Import Maps 功能,在不支持该特性的浏览器中引入垫片即可:
<!-- 引入支持 Import Maps 的垫片 -->
<script async src="https://unpkg.com/es-module-shims@1.10.0/dist/es-module-shims.js"></script>
<!-- 配置 Import Maps -->
<script type="importmap">
{
"imports": {
"@bimflux/sdk": "https://cdn.dtbim.cn/SDK/latest/sdk.es.js",
"@bimflux/ui": "https://cdn.dtbim.cn/ui-next/latest/index.js"
}
}
</script>
<!-- 正常导入模块 -->
<script type="module">
import * as bimflux from "@bimflux/sdk";
// 初始化代码...
</script>
版本说明
- JS SDK 版本:默认通过
latest标签获取最新稳定版,版本号可在 SDK 源码头部注释中查看 - UI 组件版本:默认与 SDK 版本同步,通过
latest标签获取
锁定版本(推荐生产环境):
为避免自动更新导致的兼容性问题,生产环境建议锁定具体版本,将 CDN 路径中的 latest 替换为版本号即可:
# JS SDK 锁定版本示例
https://cdn.dtbim.cn/SDK/1.10.0/sdk.es.js
# 样式文件锁定版本示例
https://cdn.dtbim.cn/SDK/1.10.0/sdk.css
# UI 组件锁定版本示例
https://cdn.dtbim.cn/ui-next/1.10.0/index.js
请确保 JS SDK、样式文件和 UI 组件的版本保持一致,以避免版本不兼容问题。
最佳实践
错误处理
class bimfluxManager {
private static instance: bimfluxManager
private module: any = null
static async getInstance() {
if (!this.instance) {
this.instance = new bimfluxManager()
await this.instance.initialize()
}
return this.instance
}
private async initialize() {
try {
this.module = await import('https://cdn.dtbim.cn/SDK/latest/sdk.es.js')
} catch (error) {
console.error('bimflux SDK初始化失败:', error)
throw new Error('无法加载bimflux SDK,请检查网络连接')
}
}
getModule() {
if (!this.module) {
throw new Error('bimflux SDK尚未初始化')
}
return this.module
}
}
性能优化
// 预加载策略
const preloadbimflux = () => {
const link = document.createElement('link')
link.rel = 'modulepreload'
link.href = 'https://cdn.dtbim.cn/SDK/latest/sdk.es.js'
document.head.appendChild(link)
}
// 在应用初始化时调用
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', preloadbimflux)
} else {
preloadbimflux()
}

BIMFlux AI
