我正在尝试将我的Gatsby项目构建到生产文件中。运行Gatsby构建命令时,该过程将运行并停留在“为页面构建静态html”
端子:
$('#myModal').modal('toggle');
它保持运行状态,而不会引发错误并停止。我创建了一个盖茨比启动器,并运行了相同的命令,并在大约30秒内完成了构建。是什么导致我的网站无法建设?
答案 0 :(得分:1)
这里的问题是,在“服务器端”,例如,当Gatsby静态呈现页面时,它们在没有“窗口”或“文档”概念的环境中运行,因此,虽然此处的代码在浏览器中运行时可能会起作用,但此处失败。
一个简单的技巧是在if语句中包装所有需要有文档的东西
if(typeof(document) !== 'undefined') { ... }
(或您的首选)。
还有一些可用于包装页面大块的组件,例如React NoSSR,它的工作方式如下:
import React from 'react';
import NoSSR from 'react-no-ssr';
import MyChart from './MyChart.jsx';
const MyChartPage = () => (
<div>
<h2>My Chart Page</h2>
<hr />
<NoSSR>
<MyChart />
</NoSSR>
</div>
);
在服务器端呈现此内容时,NoSSR规则将忽略呈现,并且需要document
的代码仅在客户端运行。