javascript - 进行 gatsby 构建时未定义窗口

标签 javascript reactjs gatsby amplitude

我正在尝试将振幅 js 与 React 和 Gatsby 集成。做 gatsby developer 时一切看起来都不错,因为它发生在浏览器中,但是当我尝试 gatsby build 时,我收到以下错误,因为 Gatsby build 发生在我们没有 window 对象的服务器上:

WebpackError: window is not defined



振幅.js:2428
~/amplitude-js/amplitude.js:2428:2

这是我的振幅模块:
import amplitude from 'amplitude-js';

amplitude.getInstance().init('API-KEY', null, {
  // optional configuration options
  saveEvents: true,
  includeUtm: true,
  includeReferrer: true,
});

Gatsby 构建不起作用:未定义窗口。

如果我不在项目中的任何地方使用此部分,则错误指向此部分:
if (windowLocalStorageAvailable()) {
  localStorage = window.localStorage;
} else if (window.globalStorage) { // <- here

  // Firefox 2-3 use globalStorage
  // See https://developer.mozilla.org/en/dom/storage#globalStorage
  try {

最佳答案

发生此错误是因为 Amplitude JS SDK 期望位于浏览器窗口对象内,并且可以访问窗口上下文以从中收集 IP 地址、操作系统、浏览器、来自 cookie 的 device_id 等属性。

您的应用程序是否可以从任何类型的后端发送事件?

要将数据发送到 Amplitude,您不需要使用 Amplitude SDK,您也有 REST 端点。
https://help.amplitude.com/hc/en-us/articles/360032842391-HTTP-API-V2

HTTP API 也有 3rd 方维护的 nodejs 包装器 https://github.com/crookedneighbor/amplitude

关于javascript - 进行 gatsby 构建时未定义窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53406367/

相关文章:

gatsby - 使用 gatsby-transformer-sharp 时将空字符串作为图像路径处理

javascript - 如何将 Lighthouse CI 设置为仅测试可访问性?

javascript - 如何独立于 HTML 运行 Javascript 文件

javascript - window.onload = function () 与 window.onload= 之间的区别

javascript - nodejs异步嵌套调用

javascript - Ember 幻影 : faker output reuse in record creation

javascript - 传递箭头函数与传递函数

javascript - react 和预绑定(bind)功能以提高性能

javascript - 在React es6中实现去抖

Gatsby 未安装