【问题标题】:What is the difference between require('d3') and require('d3-selection')require('d3') 和 require('d3-selection') 有什么区别
【发布时间】:2018-01-10 18:40:29
【问题描述】:

我正在用 nodejs 编写一个 javascript 应用程序并注意到一些奇怪的东西。 我将 d3 选择传递给函数(示例)

// mymodule.js
exports.myfunc = function(ele){
  if(ele instanceof d3.selection){
    // do something
  } else {
    // throw error
  }
}

// main.js
mymodule = require('mymodule');
var ele = d3.select('#myElement');
mymodule.myfunc(ele);

如果我说 var d3 = require('d3') 在主 js 中,如果 ele instanceof d3.selection 失败。但是,如果在 main.sj 我需要 'd3-selection' 测试通过。

require('d3')require('d3-selection') 有什么区别?

我的 package.json 看起来像

{
  ...
  "devDependencies":{
    "d3":"^4.12.2"
  }
}

【问题讨论】:

    标签: javascript node.js d3.js


    【解决方案1】:

    d3-selection 只是d3 的子节点模块。

    d3 是一个节点模块,它不是d3-selection 的实例。这就是条件失败的原因。您不能从 d3 实例调用 d3-selection

    d3-selection 是另一个模块,是d3 的子模块。这就是您可以使用 d3.selection 的原因。

    所以这些是相同的:

    1:

    // mymodule.js
    exports.myfunc = function(ele){
      if(ele instanceof d3.selection){
        // do something
      } else {
        // throw error
      }
    }
    
    // main.js    
    var d3 = require('d3')
    mymodule = require('mymodule');
    var ele = d3.selection.select('#myElement');
    mymodule.myfunc(ele);
    

    2:

    // mymodule.js
    exports.myfunc = function(ele){
      if(ele instanceof d3.selection){
        // do something
      } else {
        // throw error
      }
    }
    
    // main.js    
    var d3Selection = require('d3-selection')
    mymodule = require('mymodule');
    var ele = d3Selection.select('#myElement');
    mymodule.myfunc(ele);
    

    【讨论】:

    • 有没有更正确的方法来测试ele是否是一个实例?
    【解决方案2】:

    d3-selection 是一组独立的 D3 微库。 (Read more)

    if(ele instanceof d3.selection){
       // do something
    }
    

    在上面的块中,您必须使用一些非常特定于 D3 微库的功能,因此当您只导入 d3 时会引发错误。

    【讨论】:

      【解决方案3】:

      d3-selector 是 d3 内部的一个微型库,也称为模块。要使用 d3 包中的模块,例如 d3-selection,您必须在文档末尾导入 npm d3,您可以看到示例。

      当您只使用必需的 d3 时,您不在 d3-selection 模块中,这就是为什么您无法使用在 d3 选择中声明的任何函数d3 selection docs

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-06
        • 2013-05-16
        • 2017-06-06
        • 1970-01-01
        • 2011-08-01
        • 1970-01-01
        相关资源
        最近更新 更多