2017-03-07 86 views
1

我试图将旧的JavaScript库转换为ES6兼容模块。 库正在tracking.js(https://github.com/eduardolundgren/tracking.js/blob/master/build/tracking.js),但我所有的结果都以:Cannot read property 'xxx' of undefined将旧的JavaScript代码转换为ES6模块

有没有简单的方法来使用这样的模块?我想创建https://trackingjs.com/docs.html#step-2

更新

只是基本的例子,因为有更多的代码的请求。让我带的非工作的例子之一(Vue.js组件的一部分):

import tracking from 'tracking'; 

export default { 
    created() { 
    const colors = new tracking.ColorTracker(['magenta', 'cyan', 'yellow']); 
    } 
}; 

,误差TypeError: _tracking2.default.ColorTracker is not a constructor

+0

但是,把一些代码,更多地解释 – pmirnd

+0

@pmirnd在这里。尽管如此,它是完全错误的,但我不知道该如何开始:( –

+1

通常这将是模块加载器的工作,例如webpack和SystemJS可以选择使用将脚本添加到全局范围的脚本(如跟踪.js确实)你用什么来加载ES6模块? – user3432422

回答

0

您应该使用exports-loader,没有图书馆的修改是必要的,加载器会在全球范围内的变量,例如:

import * as tracking from 'exports-loader?tracking!tracking'; 

出口装载机需要知道如何访问模块上的全球范围内(tracking.js自身分配给window.tracking)。这里告诉它使用带有参数tracking(在查询问号之后)的exports-loader加载模块tracking(在解释标记之后)。

+1

修改语法('import * as'tracking from'exports-loader?tracking!tracking';'),但它正在工作 –

+0

嗯,我忘记了,谢谢。更新回答。 – user3432422

+0

问题仍然存在,但是,我们这些人在所有现代浏览器中使用原生模块支持,除了即将登陆的chrome。那么我们该如何做:按照现有的库到es6模块?可能构建某种包装? – backspaces