install
本文回答:如何以 npm 或 CDN 方式安装 vjmap / vjmapext,加载顺序、版本对齐、TypeScript 支持。
一、npm 安装(推荐)
npm install vjmap vjmapext
- Node.js ≥ 16(推荐 18+)
vjmapext把vjmap声明为 peerDependency(>=1.0.161,见 mapextpackage.json);npm ≥7 会自动安装 peer 依赖,但更稳妥的是两者显式一起装。建议vjmap与vjmapext使用同一时期发布的版本组合。vjmap同时是浏览器包也提供 TypeScript 类型,直接import vjmap from "vjmap"即可。
1. 样式文件必须引入
import "vjmap/dist/vjmap.min.css"; // 不引入会缺控件样式
2. ESM / CommonJS 两种写法
import vjmap from "vjmap";
import { MapCadLayer, LineEnt, CircleEnt, TextEnt } from "vjmapext";
// 或 CJS
const vjmap = require("vjmap");
const { MapCadLayer } = require("vjmapext");
二、CDN / <script> 引入
<link rel="stylesheet" href="https://vjmap.com/demo/js/vjmap/vjmap.min.css" />
<script src="https://vjmap.com/demo/js/vjmap/vjmap.min.js"></script>
<!-- 只有需要 CAD 绘图能力时才需要加载 vjmapext(注意:与 vjmap 同在 /js/vjmap/ 目录下) -->
<script src="https://vjmap.com/demo/js/vjmap/vjmapext.min.js"></script>
全部 API 挂在全局 window.vjmap / window.vjmapext 上。
加载顺序规则
vjmap.min.css要放在<head>里尽早加载。vjmap.min.js必须早于vjmapext.min.js,否则 vjmapext 内部对vjmap的引用会失败(表现:执行时报Cannot read properties of undefined (reading 'Map'))。- 也不要把业务脚本放在这两个
<script>之前执行。
三、Access Token
- 测试环境:
https://vjmap.com/server/api/v1,可在 vjmap 官网 注册后获取个人 Access Token。 - 私有化部署:使用企业自有 URL + 自己的 Token。生产环境不要把长期 Token 硬编码在前端源码里,建议后端中转或使用 short-lived token。
四、TypeScript 类型
两个包都自带 .d.ts。对 MapCadLayer 等类型可直接:
import type { Map } from "vjmap";
import { MapCadLayer, type EntityBase } from "vjmapext";
五、常见错误排查
| 报错 | 原因 |
|---|---|
vjmap.Map is not a constructor |
CDN 版 vjmap.min.js 未加载或顺序错 |
Cannot read properties of undefined (reading 'addEntity') |
MapCadLayer 没 addControl 就用 |
style is not loaded / 控件没样式 |
忘了 import "vjmap/dist/vjmap.min.css" |
openMap reject,e.status === 403(body {code:7, msg:"Token is invalid"}) |
Token 缺失、错或过期(401 则是服务未激活/超用户数);非 2xx 不进 res.error,要 try/catch |
vjcommon is not defined / Cannot find module 'vjcommon' |
官方 demo 站示例用的辅助脚本 vjcommon.min.js(selectFeatures/clearHighlight/getGeoJsonBounds 等)不在 npm 包里、也没单独发布——它只随演示站点 vjmap.com/demo/js/vjmap/vjcommon.min.js 分发。npm 工程照抄示例时要删掉 vjcommon.* 调用或自行实现对应逻辑(查询/高亮可用 map.queryRenderedFeatures 与 enableLayerClickHighlight 等原生 API 替代) |
六、卸载 / 升级
npm uninstall vjmap vjmapext
# 或
npm install vjmap@latest vjmapext@latest
升级时建议同时升级两个包,并通读官方 changelog(CHANGELOG.md)。