如何解决TypeError:d3.time是不确定的?

我想用D3.jsparsing数据/时间 为此,我创build了一个JavaScript文件并使用var d3 = require('d3') 。 我使用npm install d3npm install d3 ,并尝试npm install d3 --save其保存在package.json文件中:

 { "name": "school", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "browserify": "^13.1.0", "bufferutil": "^1.2.1", "d3": "^4.2.2", "express": "^4.14.0", "guid": "0.0.12", "gulp": "^3.9.1", "react": "^15.3.1", "react-dom": "^15.3.1", "reactify": "^1.1.1", "utf-8-validate": "^1.2.1", "vinyl-source-stream": "^1.1.0", "websocket": "^1.0.23", "ws": "^1.1.1" } } 

不过,我正面临这个例外:

 TypeError: d3.time is undefined 

程式码:

 'use strict'; var d3 = require("d3"); var latency_arr = []; var time_arr = []; var timeFormat = d3.time.format('%H:%M:%S %L'); module.exports = { histogram: function(data) { console.log(data); return { getBin: function() { var jsonObject = JSON.parse(data); this.time_arr = jsonObject.time; for(var i = 0 ; i < this.time_arr.length ; i++){ temp_time = this.time_arr[i]; this.time_arr[i] = new Date(timeFormat.parse(temp_time)); } return this.time_arr; }, addValue: function(date, value) { return true; }, getValues: function() { if(data !== undefined){ var jsonObject = JSON.parse(data); this.latency_arr = jsonObject.latency; return this.latency_arr; } } }; } }; 

检查:

 > var d3 = require('d3'); undefined 

但是d3模块在node_modules目录中。

为什么不识别d3模块? 我错过了什么?

您需要D3 v4.2.2 ,它不再具有d3.time属性,这是D3 v3的一部分。 根据更新日志, 时间格式受到一般名称空间的限制,因此更名如下:

  • d3.time.format↦d3.timeFormat
  • d3.time.format.utc d3.utcFormat
  • d3.time.format.iso↦d3.iso 格式

也就是说,它确实承认d3对象,而d3.time是未定义的。 改变你的代码

 var timeFormat = d3.timeFormat('%H:%M:%S %L'); 

应该做的伎俩。

d3模块被识别。 JS中的每个赋值都不返回,因此执行该行

 var d3 = require('d3'); 

必然会返回…什么都没有,因此在你的检查中是undefined (为了确定,只要在你的控制台inputvar a = 0 ,你也会得到一个undefined响应)。 看起来这个函数没有在模块中定义,而是模块没有被加载。

您应该检查模块的API,以确保您使用正确的function。

LE节省了一些麻烦,这里是链接

https://github.com/d3/d3/blob/master/API.md#time-formats-d3-time-format