npm 运行 build gatsby: "Page data from page-data.json for the failed page "/404/"..."
npm run build gatsby: "Page data from page-data.json for the failed page "/404/"..."
当 npm 构建我的 gatsby 项目时,我得到以下信息:
Page data from page-data.json for the failed page "/404/": {
"componentChunkName": "component---src-pages-404-js",
"path": "/404/",
"result": {
"pageContext": {}
},
"staticQueryHashes": []
}
failed Building static HTML for pages - 3.357s
ERROR #95313
Building static HTML failed for path "/404/"
See our docs page for more info on this error: https://gatsby.dev/debug-html
21 | };
22 | this.defaultAttributeTypes = {
> 23 | position: 'Float32Array',
| ^
24 | normal: 'Float32Array',
25 | color: 'Float32Array',
26 | uv: 'Float32Array'
不知道是什么意思,上网搜了一下,发现了这个问题,了解到这个错误可能是使用window对象引起的,于是试了一下检查我代码中的 window 使用,问题是我使用了反应三纤维,它可能正在使用这个文档对象,
然后,相同的答案表明可以通过向 gatsby-node.js 添加代码来绕过此错误(我猜它没有说),基本上是导出 onCreateWebpackConfig(在这个文件中我' m 导出 sourceNodes 和 onCreateWebpackConfig,希望这不会导致任何错误)
问题依然存在。
我也有一个404页面
import React from "react";
const NotFoundPage = () => {
return <div>Sorry, the page you requested was not found</div>;
};
export default NotFoundPage;
任何提示,我真的不知道如何解决它
****** 编辑 ******
Ferran 问我 onCreateWebpackConfig,这里是:
exports.onCreateWebpackConfig = ({ stage, loaders, actions }) => {
if (stage === "build-html" || stage === "develop-html") {
actions.setWebpackConfig({
module: {
rules: [
{
test: /react-three-fiber/,
use: loaders.null(),
},
],
},
});
}
};
我输入了“test: /react-three-fiber/”,但我不确定,我应该输入“坏模块”,我不知道,我只知道我的组件
正如您在处理 third-party modules that use window
or other global objects you need to add a null
loader to webpack configuration to bypass the server-side compilation using onCreateWebpackConfig
. In your case, since the package name is @react-three/fiber
时所指出的那样,请尝试以下操作:
exports.onCreateWebpackConfig = ({ stage, loaders, actions }) => {
actions.setWebpackConfig({
module: {
rules: [
{
test: /@react-three\/fiber/,
use: loaders.null(),
},
],
},
});
};
请记住,test
是一个正则表达式(这就是为什么在斜线之间,/
),它与 node_modules
下的文件夹名称相匹配。请确保文件夹名称与正则表达式匹配。
回答 configuring gatsby webpack to don't check base objects like window when compiling a component
的口是心非
But I also use canvas
, window.innerWidth
, and whatnot, in a component
How do I set another rule to indicate webpack to not throw that error
when checking a component?
对于 third-party 依赖项,您只需要继续将库添加到之前的 null
-loader 配置:
exports.onCreateWebpackConfig = ({ stage, loaders, actions }) => {
actions.setWebpackConfig({
module: {
rules: [
{
test: /@react-three\/fiber/,
use: loaders.null(),
},
{
test: /other-library/,
use: loaders.null(),
},
],
},
});
};
请记住我所说的,/other-library/
代表 node_modules
中的文件夹名称。
window
对象内部使用,只需要在使用前添加如下条件:
if(typeof window !== "undefined"){
//your window calculation
}
根据您使用 window
的时间和方式,您可能不需要在这种情况下将其包装(即:如果您在 useEffect
中使用 window
而不是触发直到加载 DOM,其中 window 将始终设置)。
所有这些方法都可以在 Gatsby 文档中找到:https://www.gatsbyjs.com/docs/debugging-html-builds/
By the way, I'm having two exports in gatsby-node.js:
exports.sourceNodes = async ({...
for a data that I use with a
graphql, and exports.onCreateWebpackConfig =...
described here,
is there any problem with that?
当然不是,只是文件导出功能。这就是它应该如何工作,这就是为什么你有一堆 API 可用的原因。
当 npm 构建我的 gatsby 项目时,我得到以下信息:
Page data from page-data.json for the failed page "/404/": {
"componentChunkName": "component---src-pages-404-js",
"path": "/404/",
"result": {
"pageContext": {}
},
"staticQueryHashes": []
}
failed Building static HTML for pages - 3.357s
ERROR #95313
Building static HTML failed for path "/404/"
See our docs page for more info on this error: https://gatsby.dev/debug-html
21 | };
22 | this.defaultAttributeTypes = {
> 23 | position: 'Float32Array',
| ^
24 | normal: 'Float32Array',
25 | color: 'Float32Array',
26 | uv: 'Float32Array'
不知道是什么意思,上网搜了一下,发现了这个问题
然后,相同的答案表明可以通过向 gatsby-node.js 添加代码来绕过此错误(我猜它没有说),基本上是导出 onCreateWebpackConfig(在这个文件中我' m 导出 sourceNodes 和 onCreateWebpackConfig,希望这不会导致任何错误)
问题依然存在。
我也有一个404页面
import React from "react";
const NotFoundPage = () => {
return <div>Sorry, the page you requested was not found</div>;
};
export default NotFoundPage;
任何提示,我真的不知道如何解决它
****** 编辑 ******
Ferran 问我 onCreateWebpackConfig,这里是:
exports.onCreateWebpackConfig = ({ stage, loaders, actions }) => {
if (stage === "build-html" || stage === "develop-html") {
actions.setWebpackConfig({
module: {
rules: [
{
test: /react-three-fiber/,
use: loaders.null(),
},
],
},
});
}
};
我输入了“test: /react-three-fiber/”,但我不确定,我应该输入“坏模块”,我不知道,我只知道我的组件
正如您在处理 third-party modules that use window
or other global objects you need to add a null
loader to webpack configuration to bypass the server-side compilation using onCreateWebpackConfig
. In your case, since the package name is @react-three/fiber
时所指出的那样,请尝试以下操作:
exports.onCreateWebpackConfig = ({ stage, loaders, actions }) => {
actions.setWebpackConfig({
module: {
rules: [
{
test: /@react-three\/fiber/,
use: loaders.null(),
},
],
},
});
};
请记住,test
是一个正则表达式(这就是为什么在斜线之间,/
),它与 node_modules
下的文件夹名称相匹配。请确保文件夹名称与正则表达式匹配。
回答 configuring gatsby webpack to don't check base objects like window when compiling a component
的口是心非But I also use
canvas
,window.innerWidth
, and whatnot, in a componentHow do I set another rule to indicate webpack to not throw that error when checking a component?
对于 third-party 依赖项,您只需要继续将库添加到之前的 null
-loader 配置:
exports.onCreateWebpackConfig = ({ stage, loaders, actions }) => {
actions.setWebpackConfig({
module: {
rules: [
{
test: /@react-three\/fiber/,
use: loaders.null(),
},
{
test: /other-library/,
use: loaders.null(),
},
],
},
});
};
请记住我所说的,/other-library/
代表 node_modules
中的文件夹名称。
window
对象内部使用,只需要在使用前添加如下条件:
if(typeof window !== "undefined"){
//your window calculation
}
根据您使用 window
的时间和方式,您可能不需要在这种情况下将其包装(即:如果您在 useEffect
中使用 window
而不是触发直到加载 DOM,其中 window 将始终设置)。
所有这些方法都可以在 Gatsby 文档中找到:https://www.gatsbyjs.com/docs/debugging-html-builds/
By the way, I'm having two exports in gatsby-node.js:
exports.sourceNodes = async ({...
for a data that I use with a graphql, andexports.onCreateWebpackConfig =...
described here, is there any problem with that?
当然不是,只是文件导出功能。这就是它应该如何工作,这就是为什么你有一堆 API 可用的原因。