【问题标题】:Convert old JavaScript code into ES6 module将旧的 JavaScript 代码转换为 ES6 模块
【发布时间】:2017-03-07 13:38:04
【问题描述】:

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

结尾

有没有简单的方法来使用这样的模块?我正在尝试创建像 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

【问题讨论】:

  • 但是,放一些代码,解释一下
  • @pmirnd 你在这里。仍然是完全错误的,但我不知道我应该如何开始:(
  • 通常这是模块加载器的工作。例如,webpack 和 SystemJS 可以选择使用将自身添加到全局范围的脚本(就像 tracking.js 一样)。你用什么来加载 ES6 模块?
  • @user3432422 我正在使用 webpack

标签: javascript es6-module-loader


【解决方案1】:

你应该使用exports-loader,不需要修改库,加载器会在全局范围内寻找变量,例如:

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

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

【讨论】:

  • 语法已更改 (import * as tracking from 'exports-loader?tracking!tracking';) 但可以正常工作
  • 啊,是的,我忘记了,谢谢。更新了答案。
  • 然而,对于我们这些在所有现代浏览器中使用本机模块支持的人来说,问题仍然存在,除了即将登陆的 chrome。那么我们该怎么做:将现有库转换为 es6 模块?可能构建某种包装器?
猜你喜欢
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 2019-07-16
相关资源
最近更新 更多