mapbox-gl-js 与 browserify 捆绑时不会呈现
mapbox-gl-js won't render when bundled with browserify
我对 mapbox-gl-js 有一个奇怪的问题。当我将 mapbox-gl.js 文件作为 CDN 添加到 html 文档头时,地图呈现良好。当我需要它并按照记录将其与 browserify 捆绑时,地图不会呈现并且我收到如下捆绑错误:Error: Cannot find module './feature' from '/home/.../mbtst/node_modules/mapbox-gl/dist'
文档描述了如何使用模块打包器:
https://www.mapbox.com/mapbox-gl-js/api/。
在发布此问题时(由于此问题已更改):
npm install --save mapbox-gl
import mapboxgl from 'mapbox-gl/dist/mapbox-gl';
// or "const mapboxgl = require('mapbox-gl/dist/mapbox-gl');"
我的地图是这样初始化的:
mapboxgl.accessToken = 'pk.eyJ1IjoiZWxsdnRyemVnIiwiYSI6ImNpejl4M2M0NDAxbWoycXRlanZnc283dnYifQ.sPFCSTsdlCOp1hk6afDvJg';
this.map = new mapboxgl.Map({
container: 'map-container', // container id
style: 'mapbox://styles/mapbox/streets-v9',
center: [6.16342, 62.47126], // aalesund
zoom: 11
});
如果我只需要这样的模块require('mapbox-gl');
- 同样的错误。
我什至尝试从 CDN 源保存文件并需要该文件 - 它抱怨缺少多个依赖模块。
代码在这个仓库中:
https://github.com/awesomemaptools/mbtst
PS:我需要在 Cordova 应用程序中捆绑脚本以供离线使用,即使用 cdn 不是一个选项。
你提供的代码基本没问题。尝试使用 require
而不是 import
:
const mapboxgl = require('mapbox-gl/dist/mapbox-gl');
然后在终端中调用以下命令:
browserify your-main-js-file.js > bundle.js
这会将您的代码和所需的模块添加到创建的 JavaScript 文件 bundle.js
,因此即使您处于离线状态,所有内容也应该可用。
然后通过脚本标签将输出包添加到您的 HTML 页面:
<script src="bundle.js"></script>
请参阅 https://github.com/substack/browserify-handbook#bundling-for-the-browser for a bit more details and check the options browserify 自定义您的包。
事实证明这是一个错误,mapbox 的人员正在努力修复它,请在此处查看问题:https://github.com/mapbox/mapbox-gl-js/issues/4453
与此同时,我从 mapbox-gl 版本“^0.33.1”升级到“^0.34.0”,现在当包含 src 而不是 dist 时它可以使用解决方法,如下所示:
const mapboxgl = require('mapbox-gl/src/index.js');
我在以前的版本中尝试过,但它没有用。
我对 mapbox-gl-js 有一个奇怪的问题。当我将 mapbox-gl.js 文件作为 CDN 添加到 html 文档头时,地图呈现良好。当我需要它并按照记录将其与 browserify 捆绑时,地图不会呈现并且我收到如下捆绑错误:Error: Cannot find module './feature' from '/home/.../mbtst/node_modules/mapbox-gl/dist'
文档描述了如何使用模块打包器: https://www.mapbox.com/mapbox-gl-js/api/。 在发布此问题时(由于此问题已更改):
npm install --save mapbox-gl
import mapboxgl from 'mapbox-gl/dist/mapbox-gl';
// or "const mapboxgl = require('mapbox-gl/dist/mapbox-gl');"
我的地图是这样初始化的:
mapboxgl.accessToken = 'pk.eyJ1IjoiZWxsdnRyemVnIiwiYSI6ImNpejl4M2M0NDAxbWoycXRlanZnc283dnYifQ.sPFCSTsdlCOp1hk6afDvJg';
this.map = new mapboxgl.Map({
container: 'map-container', // container id
style: 'mapbox://styles/mapbox/streets-v9',
center: [6.16342, 62.47126], // aalesund
zoom: 11
});
如果我只需要这样的模块require('mapbox-gl');
- 同样的错误。
我什至尝试从 CDN 源保存文件并需要该文件 - 它抱怨缺少多个依赖模块。
代码在这个仓库中: https://github.com/awesomemaptools/mbtst
PS:我需要在 Cordova 应用程序中捆绑脚本以供离线使用,即使用 cdn 不是一个选项。
你提供的代码基本没问题。尝试使用 require
而不是 import
:
const mapboxgl = require('mapbox-gl/dist/mapbox-gl');
然后在终端中调用以下命令:
browserify your-main-js-file.js > bundle.js
这会将您的代码和所需的模块添加到创建的 JavaScript 文件 bundle.js
,因此即使您处于离线状态,所有内容也应该可用。
然后通过脚本标签将输出包添加到您的 HTML 页面:
<script src="bundle.js"></script>
请参阅 https://github.com/substack/browserify-handbook#bundling-for-the-browser for a bit more details and check the options browserify 自定义您的包。
事实证明这是一个错误,mapbox 的人员正在努力修复它,请在此处查看问题:https://github.com/mapbox/mapbox-gl-js/issues/4453
与此同时,我从 mapbox-gl 版本“^0.33.1”升级到“^0.34.0”,现在当包含 src 而不是 dist 时它可以使用解决方法,如下所示:
const mapboxgl = require('mapbox-gl/src/index.js');
我在以前的版本中尝试过,但它没有用。