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

时间:2018-01-10 18:40:29

标签: javascript node.js d3.js

我在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);

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

require('d3')require('d3-selection')之间的区别是什么?

我的package.json看起来像

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

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

from a import b 只是import a 的子节点模块。

d3-selection是一个节点模块,它不是d3的实例。这是条件如何失败。您无法从d3实例

调用d3-selection

d3-selection是另一个模块,是d3的子模块。这就是为什么你可以使用d3-selection的原因。

所以这些是相同的:

1:

d3

2:

d3.selection

答案 2 :(得分:0)

d3-selector是d3里面的微型库,也称为模块。为了使用d3包中的模块(如d3-selection),您必须在文档的末尾导入npm d3,您可以看到示例。

当你只使用必需的d3时,你不在d3选择模块中,这就是为什么你不能使用在d3选择d3 selection docs

中声明的任何函数的原因