2016-05-16 8 views
7

Viele moderne JavaScript-Bibliotheken werden von Monolithen auf modularisierte NPM-Pakete aktualisiert; Ein paar Beispiele sind lodash und d3.Es ist möglich, ES6-Importe zusammenzuführen oder zu verschachteln.

Das ist großartig, wenn es darum geht, Baugrößen niedrig zu halten, aber macht ein bisschen Peinlichkeit mit Importen. Wenn die gesamte Bibliothek geladen wird, schreibe ich:

import d3 from 'd3'; 

let csv = d3.csv()... 
let xScale = d3.scale()... 

Wenn einzelne Module Laden anstelle des gesamten Pakets, ich schreibe:

import d3_scale from 'd3-scale'; 
import d3_request from 'd3-request'; 

let csv = d3_request.csv()... 
let xScale = d3.scale.scaleLinear()... 

Gibt es eine Syntax, die mir erlauben würde, meine Importe zu verschmelzen so ich kann alle Funktionsaufrufe von jedem Paket von einem einzigen Objekt (z. B. d3.csv(), d3.scaleLinear()) ausführen?

+0

Was wäre gewonnen, wenn sie alle auf dem gleichen Objekt haben? Getrennte Dinge voneinander zu trennen, ist der springende Punkt. – loganfsmyth

+0

Warum musst du * schreiben? Sie können das ganze Paket – Amit

+0

@Amit importieren, wie ich in meiner Frage erklärte, ich will nicht alle von 'd3' importieren, weil es ein großes Paket ist und ich meine Baugröße behalten kann, indem ich nur eine Teilmenge davon importiere. – ericsoco

Antwort

5

Während ich die Frage schrieb, fand ich die Antwort heraus. Selbstgummi-Ducking.

Die spread operator sieht ziemlich hier anständig:

import * as d3_request from 'd3-request'; 
import * as d3_scale from 'd3-scale'; 
const d3 = { 
    ...d3_request, 
    ...d3_scale 
}; 

d3.csv('path/to.csv', (error, data) => { 
    let xScale = d3.scale()... 
}); 
+0

Ist es möglich, dies besser zu formatieren? Was ist mit dem Doppelstrich? – Ringo

+4

Es ist 'const d3 = Object.assign ({}, d3_request, d3_scale)'. In ES6 sind Spreads für Iterables und Objekte sind nicht diejenigen. [Objektspreads] (https://github.com/sebmarkbage/ecmascript-rest-spread) ist ein Vorschlag für Stufe 2. – estus

+0

@estus Das ist ok, ich suche keine ES6-spezifische Antwort, ich suche nach einer Antwort, die in meiner Build-Pipeline (Babel.js) funktioniert. Also ES7 Optionen funktionieren für mich. Aber bitte fühlen Sie sich frei, das als separate Antwort aufzuschreiben, und ich werde upvote. – ericsoco

Verwandte Themen