我正在创建个人网站/产品组合,我偶然发现了强大的gatsby.js软件包。
我还需要将一个复杂的数据集可视化用于研究目的,我想使用d3.js,并包括我在Gatsby支持的站点中创建的仪表板。
可以在反应组分中使用d3 - > https://medium.com/@Elijah_Meeks/interactive-applications-with-react-d3-f76f7b3ebc71
理论上,Gatsby应该能够支持d3集成,但到目前为止我的尝试都失败了。
以下是我的尝试:
完成Gatsby教程https://www.gatsbyjs.org/tutorial/
我正在使用gatsbyjs文档中已完成的第4个教程网站,其中包含以下内容
npm install --save d3
添加了utils / d3.js
文件内容
import d3 from "d3"
module.exports = d3
我还在gatsby-config.js插件中添加了d3。
我运行gatsby develop
,并收到以下错误,该错误会挂起。
success delete html files from previous builds — 0.005 s
success open and validate gatsby-config.js — 0.003 s
(node:8725) UnhandledPromiseRejectionWarning: Unhandled promise rejection
(rejection id: 2): Error: Unable to find plugin "d3"
(node:8725) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated.
In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
任何反馈都会有所帮助,如果这是一个难以解决的壮举,那么我实现d3整合目标和简单的个人网站框架的阻力最小?
更新09/08/17
我切换到了Hello World!调试d3问题的教程。我尝试了d3和d3-node npm包。
将import d3 from "d3"
添加到我的index.js文件后,我会在bootstrap完成后发生两个类似的错误。
两个错误都在编译尝试中循环并分别输出:
d3错误
ERROR Failed to compile with 2 errors
These dependencies were not found:
* child_process in ./~/xmlhttprequest/lib/XMLHttpRequest.js
* fs in ./~/xmlhttprequest/lib/XMLHttpRequest.js
To install them, you can run: npm install --save child_process fs
d3-node error 将index.js上的导入切换为“d3-node”
ERROR Failed to compile with 13 errors
These dependencies were not found:
* fs in ./~/jsdom/lib/jsdom.js, ./~/jsdom/lib/jsdom/browser/resource-loader.js and 3 others
* net in ./~/tough-cookie/lib/cookie.js, ./~/forever-agent/index.js and 1 other
* child_process in ./~/jsdom/lib/jsdom/living/xmlhttprequest.js
* tls in ./~/forever-agent/index.js, ./~/tunnel-agent/index.js
To install them, you can run: npm install --save fs net child_process tls
These relative modules were not found:
* ../file-api/FileReader-impl.js in ./~/jsdom/lib/jsdom/living/generated/FileReader.js
* ../events/MutationEvent-impl.js in ./~/jsdom/lib/jsdom/living/generated/MutationEvent.js
答案 0 :(得分:4)
问题与最新版本的D3 v4使用一堆node.js依赖关系这一事实有关,如gatsby github问题所述:
https://github.com/gatsbyjs/gatsby/issues/2107
解决方案是修改您的webpack配置,以便加载正确版本的d3。
我在gatsby项目中使用D3来创建一个力导向图,我发现我只能通过加载d3-force库而不是整个d3包来回避这个问题。这是优选的,因为它反应让D3直接操纵DOM。更好的方法是使用D3进行计算并对渲染做出反应,如下所示:
https://medium.com/walmartlabs/d3v4-forcesimulation-with-react-8b1d84364721
答案 1 :(得分:2)
只应将Gatsby插件添加到gatsby-config.js中。对于像D3这样的其他常规NPM软件包,您只需将它们导入模块即可。