d3.js - 带有 ES6 模块的 d3 v4.0 自定义构建

标签 d3.js systemjs jspm rollupjs

我正在试验 d3 v4.0 的 alpha,并尝试在 jspm 设置中创建自定义构建。我似乎无法理解新的模块化构建是如何工作的。

如果我想从一个模块中导入一个命名导出,即来自 d3-request 的 json,我可以执行以下操作:import {json} from "d3-request";通过 jspm/npm 安装模块后。

如果我想安装整个库,同样 import d3 from "d3";
如果我想安装多个模块和命名导出,并在 d3 命名空间下让它们全部可用(即,在 d3-request 旁边导入 d3-shape,并在同一个 d3 全局中访问 d3.json 和 d3.line) ,这个的正确语法是什么?

我意识到当使用这些模块的独立版本时,全局变量如 d3_shape被导出。这是为了在将这些模块与我的应用程序捆绑在一起时为每个模块提供单独的命名空间吗?

最佳答案

我相信计划是在 D3 4.0 完成后提供整个库的 ES6 构建,以及自定义构建生成器,此时您将能够执行此操作:

import { json, line } from 'd3';

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

(请注意,执行此操作时没有 d3 变量 - 您直接使用命名导入。)

目前,d3包是版本 3,它没有 ES6 构建,因此同时有两个选项 - 安装您需要的模块并从它们单独导入...

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

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

...或创建您自己的自定义构建:

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

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

其中,我更喜欢第一个——它更明确,并且不太可能导致未使用的代码最终出现在您的构建中。

关于d3.js - 带有 ES6 模块的 d3 v4.0 自定义构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37027260/

相关文章:

node.js - gulp_jspm 弃用警告

javascript - jspm + karma + karma-jspm + 插件 typescript

angular - ES6 导入问题 [SystemJS 0.20.9 + TypeScript + Angular 2 + jspm 0.17.0-beta.40]

javascript - 如何配置 Typescript 使其 "knows about"我的 SystemJS 路径?

javascript - 监视嵌套在传递到 Angular 组件的多个对象中的更新

javascript - 如何给NVD3图添加标签换行功能?

javascript - 如果源 json 更新(添加或删除项目),则动态更新 D3 Sunburst

javascript - c3.js - 如何在条形图悬停时显示手形光标

node.js - 关于与 npm/gulp 脚本集成的说明

javascript - 将 TypeScript 与外部 JS 文件捆绑在一起(例如 node_modules)