Ubuntu20.04离线安装nodejs-carto运行时报hasOwnProperty未定义错误如何解决?
问题根因
Ubuntu 20.04 官方源内置的 nodejs-carto 包存在依赖缺陷,配套预装的 node-mapnik-reference 包没有正确暴露 version 属性,导致 carto 初始化时读取空值触发报错,该问题和 project.mml 配置无关,所以即使执行版本查询命令也会触发报错。
离线可行解决方案
因你无法连接公网、不能使用 npm 安装更新版本,直接修改本地 carto 源码即可修复,操作步骤如下:
- 打开报错指向的源码文件:
sudo nano /usr/lib/nodejs/carto/lib/carto/tree/reference.js - 找到第19行的原判断逻辑:
在该行前面新增一行代码,手动绑定兼容的默认 mapnik 版本,修改后完整代码段为:if (mapnik_reference.version.hasOwnProperty(version)) {// 手动指定默认兼容的mapnik版本为3.0,适配Ubuntu20.04运行环境 mapnik_reference.version = {"3.0.0": mapnik_reference.latest}; if (mapnik_reference.version.hasOwnProperty(version)) { - 保存文件退出后,先执行
carto -v验证,正常会输出版本号,再执行carto project.mml > mapnik.xml即可正常生成可用的渲染配置文件。
备选兼容方案
如果使用的 openstreetmap-carto 样式版本较新,和 apt 安装的旧版 carto 存在语法兼容问题,可以在内网其他可联网的同架构 Ubuntu 20.04 设备上用 npm 打包好 carto 的离线安装包,再传到目标设备全局安装即可,无需修改源码。
内容的提问来源于stack exchange,提问作者lorca
相关产品推荐
相关产品推荐

