1

我在 D3 4.0 和 Ionic2/Angular2 项目中的导入语句遇到问题。

我相信我使用了正确的导入语句,并且一切都编译好了。

import * as d3Request from 'd3-request'; 

export class HomePage { 

  constructor() {

    d3Request.xml('assets/mysvg.svg')
      .mimeType("image/svg+xml")
      .get(function(error, xml) {
        if (error) throw error;
        document.body.appendChild(xml.documentElement);
      });
   }
}

编译为:

var d3Request$1 = unwrapExports(d3Request);

var d3Request$2 = Object.freeze({
    default: d3Request$1,
    __moduleExports: d3Request
});

...
 d3Request$2.xml('assets/mysvg.svg')
    .mimeType("image/svg+xml")
    .get(function (error, xml) {
       if (error) throw error;
       document.body.appendChild(xml.documentElement);
    });

但是,在运行时该xml函数不存在于d3Request$2.xml. 它只存在于 上d3Request$2.__moduleExports.xml,但代码不会编译为那个。是什么赋予了?

我也尝试过import d3Request from 'd3-request'它也可以编译但仍然不起作用。结果是:

var d3Request$1 = unwrapExports(d3Request);

...
d3Request$1.xml('assets/emojis/laughing.svg')
   .mimeType("image/svg+xml")...

但是,这仍然不起作用,因为d3Request$1最终未定义。d3Request.xml存在,但代码不编译为,它编译为d3Request$1.xml

4

1 回答 1

1

和表示您正在导入一个 CommonJS 文件(并使用unwrapExports(...)rollup -plugin-commonjs 对其进行转换),而不是 ES 模块版本。奇怪的是它不起作用,但没关系 - 您可以通过导入正确的文件完全绕过转换。__moduleExports

没有看到你的汇总配置文件是不可能确定的,但我猜你正在使用rollup-plugin-node-resolve?如果是这样,解决方案是确保jsnext: true设置了该选项,以便 Rollup 可以找到这个文件而不是这个文件

于 2016-10-10T23:38:40.413 回答