Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

d3 v4.0 custom build with ES6 modules

I'm experimenting with the alpha of d3 v4.0, and attempting to create a custom build, within a jspm setup. I can't seem to get my head around how the new modular build is intended to work.

If I want to import a named export from a module, ie json from d3-request, I can do the following: import {json} from "d3-request"; after having installed the module via jspm/npm.

If I want to install the whole library, likewise import d3 from "d3";

If I want to install multiple modules and named exports and have them all available to me under the d3 namespace (ie, importing d3-shape alongside d3-request, and having access to d3.json and d3.line in the same d3 global), what is the correct syntax for this?

I realise that when using standalone versions of these modules globals such as d3_shape are exported. Is this the intention, to have separate namespaces for each module when bundling these modules with my application?

like image 435
amigolargo Avatar asked May 04 '16 12:05

amigolargo


1 Answers

I believe the plan is to offer an ES6 build of the entire library once D3 4.0 is finished, along with a custom build generator, at which point you'll be able to do this:

import { json, line } from 'd3';

json( 'file.json', ( err, data ) => ... );

(Note that there's no d3 variable when you do this – you use the named imports directly.)

Currently, the d3 package is version 3, which doesn't have an ES6 build, so in the meantime there are two options – install the modules you need and import from them individually...

import { json } from 'd3-request';
import { line } from 'd3-shape';

json( 'file.json', ( err, data ) => ... );

...or create your own custom build:

// src/my-d3.js
export { json } from 'd3-request';
export { line } from 'd3-shape';

// src/app.js
import { json, line } from './my-d3.js';

Of those, I'd favour the first – it's more explicit, and possibly less likely to cause unused code to end up in your build.

like image 174
Rich Harris Avatar answered Sep 25 '22 22:09

Rich Harris