Google Closure - импортировать устаревший класс в класс модуля ES6 - PullRequest
0 голосов
/ 04 марта 2019

У меня есть кодовая база, написанная с использованием 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 голосов
/ 03 мая 2019

То, что вы ищете, возможно, так как различные объявления модулей могут сосуществовать в одной и той же кодовой базе, но ваш вопрос не содержит информации, а именно, как вы используете оба класса и какие аргументы компилятора используются.Также имеет значение, импортируете ли вы farm.animal.Cow из устаревшего пространства имен или goog.module.Есть ли шанс, что вы сможете обновить свой вопрос, включив в него «main() модуль / функцию» (так сказать)?

Чтобы следовать рекомендациям SO, я попытаюсь ответить с помощью имеющейся информации:

  • Использование farm.animal.Cow из устаревшего пространства имен?Добавьте goog.declareLegacyNamespace('farm.animal.Cow') в декларацию goog.module
  • namespace.Animal отсутствует важная аннотация /** @constructor */.

[Недостаточно репутации, чтобы комментировать.Я перенесу части комментария в этом ответе в соответствующий комментарий, как только смогу.]

...