css - Gatsby 构建 webpack 因手写笔而失败
问题描述
当我运行 gatsby build 我得到这个错误:
failed Building static HTML for pages - 10.179s
ERROR #95313
Building static HTML failed
See our docs page for more info on this error: https://gatsby.dev/debug-html
343 | for (c = []; b < a; ++b) {
344 | for (var n = 0; n < m; ++n) {
> 345 | c[v++] = Z(d[n] + ' ', h[b], e).trim();
| ^
346 | }
347 | }
348 |
WebpackError: The module '/node_modules/canvas/build/Release/canvas.node'
- stylis.esm.js:345
node_modules/@emotion/stylis/dist/stylis.esm.js:345:1
- stylis.esm.js:151
node_modules/@emotion/stylis/dist/stylis.esm.js:151:1
- stylis.esm.js:175
node_modules/@emotion/stylis/dist/stylis.esm.js:175:1
- stylis.esm.js:286
node_modules/@emotion/stylis/dist/stylis.esm.js:286:1
- stylis.esm.js:151
node_modules/@emotion/stylis/dist/stylis.esm.js:151:1
- stylis.esm.js:175
node_modules/@emotion/stylis/dist/stylis.esm.js:175:1
- stylis.esm.js:286
node_modules/@emotion/stylis/dist/stylis.esm.js:286:1
- stylis.esm.js:151
怎么解决?运行 gatsby develop 时没有错误。
解决方案
将此代码段添加到gatsby-node.js
:
exports.onCreateWebpackConfig = ({ stage, loaders, actions }) => {
if (stage === "build-html") {
actions.setWebpackConfig({
module: {
rules: [
{
test: /canvas/,
use: loaders.null(),
},
],
},
})
}
}
有一个包试图访问全局对象,例如window
或document
在您的 SSR(服务器端渲染)中,显然没有定义(它甚至存在),因为gatsby-build
发生在节点服务器中,而gatsby develop
发生在浏览器端,其中存在window
和编译时间。null
使用上面的代码片段,当 webpack 转译代码时,您正在向有问题的模块添加一个加载器。
规则测试是一个正则表达式(因此是大括号,/
),它与里面的文件夹名称匹配node_modules
。输出错误表明存在canvas
问题,但您可能需要将其更改为/stylis/
推荐阅读
- angular - 为什么我的文件内容在我获取时会发生变化?
- javascript - 如何在 PHP while 循环中为循环的每个元素使用 JS 脚本?
- javascript - window.print() 不打印整个页面
- c# - 避免使用 ActionBlock
.PostDataflowBlockOptions.BoundedCapacity 不是默认值时发布? - angular - Angular 9 路由提供没有错误的空白页面
- r - 夏皮罗-威尔克检验和置信区间的有效性
- azure - Azure APIM:使用发送请求模式发送客户端证书
- php - PHP致命错误:未捕获的phpmailerException:SMTP错误:无法验证
- python - Python flask_sqlalchemy:AttributeError:“表”对象没有属性“add_by”
- java - 如何在不将整个文件加载到内存的情况下读取大型 avro 文件