【问题标题】:What is D3js version support policy?什么是 D3js 版本支持政策?
【发布时间】:2018-07-23 11:41:02
【问题描述】:

我是 D3js 的新手,在开始之前 我想了解如何管理核心和插件的版本,所以我发现自己不会被旧的不受支持的版本所困扰或使用太实验性的东西。

如果我查看发布历史记录,我会发现 v4Jun 2016 (https://github.com/d3/d3/releases?after=v4.1.0) 和 v5Jan 2018 (https://github.com/d3/d3/releases?after=v5.0.1) 中被引入。

然而,当我查看库 (https://github.com/d3/d3/wiki/Gallery) 上的 D3js 代码时,我发现大部分代码是基于 v3 的,这是 2 后面的主要版本。

例如,如果我使用Sankey example updated in May 2018,它仍然基于v3,如果我尝试用v5 替换它,它就会中断。

另一个例子:someone had an issue with v4 back in Feb 2017,当时和 2017 年 4 月的答案仍然无法正常工作(尽管 it was already v4.8 at the time,在 v4 发布近 1 年后):

所以看来v4/v5 是与v3 完全不同的分支,甚至不向后兼容。

因此我的问题是:

  • v5v3 向后兼容到什么程度?
  • v3 还能支持多长时间?

【问题讨论】:

  • 该画廊中的大多数示例都是由 D3 创建者 Mike Bostock 制作的。他曾经说过,他计划(慢慢地)将大部分示例转换为 v4(或现在的 v5),但显然这是很多工作:我们可以假设,他很忙,一些示例永远不会转换为v4/v5。但是,任何人都可以分叉这些示例并进行转换。
  • 关于您的第一个问题,v5 与v3 不兼容,需要进行一些更改。当然,这取决于方法,机会很低,但您可能会偶然发现与 v5 完美配合的 v3 代码(只要该假设代码不使用比例、轴、弧、曲线​​、层次结构、力布局、路径、等等...)。
  • 感谢您的澄清。所以如果我从现在开始我应该选择v5 对吗? (我只需要记住,大多数示例都需要适应该版本)
  • 第 4 版破坏了大量的 API,但大多数时候将 v3 代码转换为 v4 代码并不难。我强烈建议您使用 v5,更新是好的,而且它将使您的代码在 API 发展时更易于维护。

标签: d3.js version-control backwards-compatibility


【解决方案1】:

将 cmets 合并为 1 个综合答案:

一般哲学
考虑到 D3 的创建者是 creating/maintaining the library mostly by himself,似乎没有足够的资源来设计向后兼容或维护旧代码,这也是可以理解的。

选择哪个版本
综上所述,在重新开始时,似乎选择最新版本是最明智的选择。

向后兼容性
v3v5 存在向后不兼容的更改(v5 删除了 d3-queued3-requestschemeCategory20...)。因此,如果将来引入其他向后不兼容的更改,也不会令人震惊。

旧版支持
好像一出新版本,就放弃了对旧版本的支持,所有的精力都集中在新版本上:
https://twitter.com/mbostock/status/764274097995907072

【讨论】:

    【解决方案2】:

    D3v3 schemeCategory20[bc] 在 v4(??) 和 v5 中不可用。

    使用 v3 源代码中的颜色数字并将它们转换为我们可以在 v5 中使用的十六进制等效项

    var colors = d3.scaleOrdinal(d3.schemeCategory20b);
    

    小sn-p

    function d3_rgbHexString(value) { return "#" + (0x1000000 + value).toString(16).substring(1); }
    d3.schemeCategory20  = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbHexString);
    d3.schemeCategory20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbHexString);
    d3.schemeCategory20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbHexString);
    

    【讨论】:

    • 谢谢rioV8,但我问的是一般支持政策,以及schemeCategory20b具体案例的详细信息
    • 我要使用的d3v3示例我将它们转换为d3v5,工作量不大,因此无需在d3v3中做新的东西。唯一缺少的是schemeCategory20 颜色集。我刚刚发现 d3v4 有schemeCategory20。也许我会研究它是如何实现的。
    猜你喜欢
    • 2020-04-14
    • 1970-01-01
    • 2021-09-06
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多