topojson未捕获TypeError:无法读取属性'功能'未定义的

时间:2016-12-22 20:24:51

标签: javascript npm webpack ecmascript-6 topojson

背景

  • JavaScript在调用topojson.feature(topology, object)时失败。这是topojson-client的文档,当topojson进入2.x时,它看起来已被添加,但它与1.6.26中的版本相同,即我所使用的版本。< / LI>
  • 使用webpack构建用于生产的JS和用于本地开发的webpack-dev-server。
  • 直到最近才工作正常。

问题

  

relevant_page.js:705 Uncaught TypeError:无法读取属性&#39;功能&#39;未定义的

代码

的package.json:

...
"dependencies": {
   ...
   "topojson": "^1.6.26",

relevant_page.js:

import topojson from topojson;
...
function ready(data) {
  var topojsonStates = topojson.feature(us, us.objects.states).features;

故障排除

我在浏览器的引发错误的行中设置了一个断点:

var topojsonStates = _topojson2.default.feature(us, us.objects.states).features;

并检查这些以查看发生了什么:

us: Object
  ...
  type: "Topology"

us.objects.states: Object
  ...
  type: "Topology"

_topojson2.default: undefined

_topojson2.feature(us, us.objects.states).features: Array[53]

_topojson2.default未定义(且_topojson2.feature有效)的事实让我停下来,但我不确定那里发生了什么。有什么想法吗?

备注/更新

这与how to consume an npm package with ES6 module via webpack不同,因为如果您必须继续使用的主要内容是未捕获的TypeError,则无法找到该问题并回答。请告诉我是否应该在问题或答案中添加任何内容以使其更有用和可搜索。

1 个答案:

答案 0 :(得分:3)

来到GitHub issue,有人报告了同样的事情,并在pull request中修复了答案,即将topojson导入命名空间:

import * as topojson from 'topojson';

topojson-client documentation指示您导入它的方式。我没有意识到1.6.x会是一样的。在切换到ES6之后,这听起来肯定已经坏了。