将mapbox-gl-geocoder添加到gatsby.js时,gatsby构建失败

阿纳特

我有一个带mapbox-gl的gatsby.js应用程序,并且在我尝试包括mapbox-gl-geocoder程序包以添加搜索功能之前,所有程序均成功运行。

我已经使用npm如下安装它:

npm install mapbox/mapbox-gl-geocoder --save

然后,将其添加到React组件中:

import '@mapbox/mapbox-gl-geocoder/lib/mapbox-gl-geocoder.css';
import MapboxGeocoder from '@mapbox/mapbox-gl-geocoder';

在useEffect挂钩中:

  map.addControl(
      new MapboxGeocoder({
        accessToken: mapboxgl.accessToken,
        zoom: 20,
        placeholder: 'Enter City',
        mapboxgl: mapboxgl
      }), 'top-left'
    );

在本地运行时,gatsby develop它可以正常运行,但是在使用Netlify进行部署时,出现以下错误:

:24:21 PM: error Generating SSR bundle failed
1:24:21 PM: Can't resolve 'electron' in '/opt/build/repo/node_modules/@mapbox/mapbox-sdk/node_modules/got'
1:24:21 PM: If you're trying to use a package make sure that 'electron' is installed. If you're trying to use a local file make sure that the path is correct.

似乎mapbox-gl-geocoder依赖于@ mapbox / mapbox-sdk,而mapbox-sdk依赖于某种方式需要电子?

我只能在npm页面上读到有关电子的以下内容:

Electron support has been removed
The Electron net module is not consistent with the Node.js http module. See #899 for more info.

无论如何,我都尝试使用npm安装电子版,以查看错误是否消失,并且该构建开始失败并出现新错误,指示该窗口对象不可用。

10:35:45 AM: error "window" is not available during server side rendering.

谷歌搜索该错误导致我得到了一些关于不加载程序包的答案,gatsby-node.js但这也无济于事。

费兰·布埃鲁

当使用第三方模块处理window的盖茨比你需要一个添加null的SSR(在加载器自身的配置的WebPack避免transpilation小号erver-小号IDE [R endering)。这是因为gatsby develop发生在浏览器中,而gatsby build发生在显然没有awindow或其他全局对象的Node服务器中

exports.onCreateWebpackConfig = ({ stage, loaders, actions }) => {
  if (stage === "build-html") {
    actions.setWebpackConfig({
      module: {
        rules: [
          {
            test: /@mapbox/,
            use: loaders.null(),
          },
        ],
      },
    })
  }
}

请记住,该test值是一个正则表达式,将与下面的文件夹匹配,node_modules因此请确保/@mapbox/正确的名称。

使用补丁程序包可能有效,但请记住,您要添加另一个程序包,另一个捆绑文件,这可能会对性能产生影响。建议的代码段是内置的解决方案,会在您构建应用程序时发生。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将geoJSON添加到this.map mapbox-gl-js

将 Geoserver Layers Group 添加到使用 mapbox-gl-js 创建的地图中

Gatsby-将Google字体添加到Gatsby网站

将源添加到mapbox GL中的现有图层

将 React 添加到静态 Gatsby 站点

如何将静态文件添加到Gatsby网站

将 Favicon.ico 添加到 Contentful 或 Gatsby 网站

将 js 添加到 MapBox 弹出窗口

是否可以将子域上的 gatsby 博客添加到现有的 gatsby 站点?

Mapbox GL JS:将地图导出为PNG或PDF?

使用Mapbox gl js将鼠标悬停在自定义标记上添加弹出窗口

如何将 Mapbox js 函数转换为 Mapbox gl js

无法将纹理添加到GL_QUAD

Mapbox GL-JS:在标签下添加新的tileet覆盖

Mapbox GL Js:添加和删除GeoJSON源和图层

Mapbox GL JS getBounds()/ fitBounds()

Mapbox GL JS与Mapbox.js

Mapbox GL Geocoder 中的类别搜索

将#include“ GL / freeglut.h”添加到C ++ wxWidgets代码CodeBlocks中时,会生成生成错误

如何将链接添加到Gatsby配置文件

无法将远程文件节点添加到父节点 Gatsby

如何使用Gatsby将任意文件添加到/ public?

将预先存在的静态HTML页面添加到React / Gatsby站点的最快方法

如何将本地脚本文件添加到 gatsby

如何将Facebook插件页面添加到gatsby(反应)

如何将PostCSS插件添加到Gatsby SASS插件

是否可以仅将Gatsby.js的某些部分添加到现有的HTML文件中?

Mapbox mapbox-gl-geocoder 容器重叠结果

通过JS API将标记添加到mapbox地图,然后“保存”