Google关闭-导入ES6模块类中的旧版类

时间:2019-03-04 14:42:33

标签: javascript google-closure-compiler google-closure google-closure-library

我有一个使用ES5编写的代码库,我想使用模块将部分代码更新为ES6。 这是我的代码:

goog.module('farm.animal.Cow');

// Legacy class using es5
var Animal = goog.require('namespace.Animal');

class Cow extends Animal {
  constructor() {
    super();
  }
}

exports = Cow;

这是遗留类

goog.provide('namespace.Animal');

namespace.Animal = function() {

};

我试图遵循两个项目的GitHub Wiki上的迁移建议:

https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide

https://github.com/google/closure-compiler/wiki/Migrating-from-goog.modules-to-ES6-modules

但是到目前为止还没有运气。大多数情况下,我会出现以下错误:

depstree.NamespaceNotFoundError: Namespace "namespace.Animal" never provided.

有人对如何正确迁移代码有任何想法吗?我在做什么错了?

1 个答案:

答案 0 :(得分:0)

您寻求的东西是可能的,因为不同的模块声明可以共存于同一代码库中,但是您的问题是缺少信息,即您如何使用两个类以及正在使用哪些编译器参数。无论是从旧名称空间导入farm.animal.Cow还是从goog.module导入,都同样重要。您是否有机会更新您的问题以包含“ main()模块/功能”(可以这么说)?

要遵循SO准则,我将尝试使用到目前为止的可用信息进行回答:

  • 使用旧命名空间中的farm.animal.Cow吗?在goog.declareLegacyNamespace('farm.animal.Cow')声明下添加goog.module
  • namespace.Animal缺少重要的/** @constructor */注释。

[没有足够的声誉来发表评论。一旦能够,我将将该答案的评论部分迁移到适当的评论。]