reactjs - 如何在 Gatsby 中使用 Fabric?
问题描述
我在 gatsby 中使用织物很好,但是当我构建网站时出现错误:
ERROR #98123 WEBPACK
Generating SSR bundle failed
Unexpected character '' (1:0)
File: node_modules/canvas/build/Release/canvas.node:1:0
错误来自下面的导入结构代码,因为当我删除导入时一切正常
import { fabric } from "fabric"
我尝试了这段代码也得到了同样的错误
const { fabric } = (() => {
if (typeof window !== "undefined") {
return require("fabric")
}
})()
我该如何解决?
解决方案
似乎织物正在使用全局对象(例如window
或document
)来制作它们的东西。gatsby develop
在浏览器端编译,这些全局对象总是被定义的。另一方面,当你运行gatsby build
代码时,在 Node 服务器中编译,显然这些变量还没有定义。
您有几种方法可以绕过该限制。
在要导入结构依赖项的组件中,只需使用:
if (typeof window !== `undefined`) { const module = require("module") }
在您的情况下,您将无法解构
fabric
为 aprop
因为它尚未定义,您将需要使用useEffect
钩子。gatsby-node.js
通过添加以下内容来修复第三方模块导入:if (stage === "build-html") { actions.setWebpackConfig({ module: { rules: [ { test: /fabric/, use: loaders.null(), }, ], }, }) } }
基本上,使用此代码段,您正在为
null
webpack 配置中的冲突模块设置一个加载器,以避免代码破坏。/fabric/
是一个正则表达式,它将匹配下面的文件夹,node_modules
因此请检查路径和命名是否正确
您可以查看调试 HTML 构建以获取更多信息。
推荐阅读
- python - 如何在 NetworkX 中找到所有节点的祖先?
- django - Django - 在模板循环中获取所有相关信息
- reactjs - 由于反应组件内的错误“TS2339:类型'Y'上不存在属性'X'”而无法设置参考
- java - 为什么我的 for 循环不在输出中使用?
- python - 如何使用美丽的汤从网站下载图像?
- go - 在 Go 操场上没有得到预期的结果
- typeorm - TypeORM - 将 take/limit 与 leftJoinAndSelect 一起使用未按预期工作
- python - web2py:检测下拉小部件的变化
- mysql - 无法在 sysdatabases 中找到数据库的条目
- java - Groovy 中的日期格式匹配