Ionic не может импортировать глобальную библиотеку - PullRequest
0 голосов
/ 09 октября 2018

Я создал чистую библиотеку Javascript (не зависящую от других фреймворков, таких как Angular или Ionic), которая связана с помощью Webpack.Он объединен, поэтому вся функциональность экспортируется в объект окна.

Теперь я хочу использовать эту библиотеку в приложении Ionic.В моем коде я импортирую библиотеку следующим образом:

import * as MyLibrary from "my-library"

, которая работает, когда мой редактор кода распознает импорт (и даже выбирает типизированные шрифты).При создании проекта с ionic build ошибки компиляции не отображаются.

Однако, когда я запускаю проект в браузере, я сталкиваюсь с проблемой.Когда я регистрирую импортированную библиотеку, она показывает пустой объект без экспортируемых классов и методов.

import * as MyLibrary from "my-library"
console.log(MyLibrary); // This results in an empty object e.g. {}

Фактически это приводит к сбою всего моего кода, так как он пытается вызвать методы для пустого объекта.

Однако, когда я набираю MyLibrary в консоли Chrome Debugger, он показывает, что библиотека была загружена.

Не удается ли Ionic загрузить такие глобальные библиотеки такого типа?

1 Ответ

0 голосов
/ 10 октября 2018

Похоже, что модуль my-library, сгенерированный Webpack, не имеет экспорта, но создает глобальную переменную MyLibrary в окне при загрузке.Если это так, то вместо импорта MyLibrary из модуля (и теневого копирования глобальной переменной) следует просто импортировать модуль для его побочного эффекта, а затем использовать глобальную переменную MyLibrary:

import "my-library"
console.log(MyLibrary);  // This should show you the same thing you saw in the Chrome console.

Это, вероятно, испортит информацию о вашем типе.Если в настоящее время TypeScript считает, что модуль объявлен под именем my-library, добавьте следующий танец в новый файл .d.ts в своем проекте, чтобы связать модуль с глобальной переменной MyLibrary:

declare module "dummy" {
  import * as MyLibrary_ from "my-library";
  global {
    namespace Dummy {
      export import MyLibrary = MyLibrary_;
    }
  }
}
import MyLibrary = Dummy.MyLibrary;

(См. эту проблему для справки.)

Вместо использования вышеупомянутых обходных путей может быть менее запутанным изменить способ связывания my-library, чтобы он имел экспорт вместо определенияглобальная переменная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...