I'm in the process of creating a personal website/portfolio, and I stumbled upon the robust gatsby.js package.
I also have to visualize a complicated dataset for research purposes and I want to use d3.js, and include the dashboard I create in my Gatsby powered site.
It's possible to use d3 in react components -> https://medium.com/@Elijah_Meeks/interactive-applications-with-react-d3-f76f7b3ebc71
Theoretically,Gatsby should be able to support d3 integration, but my attempts thus far have failed.
Here is what I have tried:
Complete the Gatsby tutorials https://www.gatsbyjs.org/tutorial/
I am using a completed 4th tutorial site from the gatsbyjs documentation with the following additions
npm install --save d3
added utils/d3.js
file contents
import d3 from "d3"
module.exports = d3
I also added d3 to the gatsby-config.js plugins.
I run gatsby develop
, and receive the following error, which hangs.
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.
Any feedback would be helpful, if this is an intractable feat, what would be my path of least resistance to accomplish my goal of d3 integration and an easy personal site framework?
UPDATE 09/08/17
I switched to the Hello World! tutorial to debug the d3 issue. I have tried d3 and d3-node npm packages.
Upon adding import d3 from "d3"
to my index.js file, I get two similar errors that occur after the bootstrap finishes.
Both errors loop in compile attempts and respectively output:
d3 error
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 switch the import on index.js to "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
The JavaScript ecosystem has completely changed during this time, in terms of libraries, best practices and even language features. Nevertheless, D3 is still here. And it's more popular than ever.
You will need to install Node. js before using Gatsby. Gatsby is built using JavaScript, and requires the Node. js runtime.
Gatsby enables developers to build fast, secure, and powerful websites using a React-based framework and innovative data layer that makes integrating different content, APIs, and services into one web experience incredibly simple.
695 companies reportedly use D3. js in their tech stacks, including Accenture, Coinbase, and Coursera.
The problem has to do with the fact that the most recent version of D3 v4 uses a bunch of node.js dependencies, as explained in this gatsby github issue:
https://github.com/gatsbyjs/gatsby/issues/2107
The solution is to modify your webpack config so that it loads the correct version of d3.
I'm using D3 in a gatsby project to create a force-directed graph, and I discovered I could sidestep this issue by only loading the d3-force library instead of the entire d3 package. This is preferable anyways because it is anti-react to let D3 directly manipulate the DOM. A better approach is to use D3 for the calculation and react for the rendering as shown here:
https://medium.com/walmartlabs/d3v4-forcesimulation-with-react-8b1d84364721
Only Gatsby plugins should be added to gatsby-config.js. For other regular NPM packages like D3, all you need to do is import them into your modules.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With