Как условно импортировать библиотеку в angular в зависимости от платформы браузера - PullRequest
0 голосов
/ 04 марта 2020

Мне нужно импортировать библиотеку динамически в зависимости от платформы браузера. Чтобы Angular Universal не давал ошибок, потому что он использует объект окна.

import * as Muuri from 'muuri';

Итак, я хочу что-то вроде этого:

if (isPlatformBrowser(this.platform)) {
     import * as Muuri from 'muuri';
    }
    else {
  declare var Muuri;
}

Очевидно, что это не работает.

Ответы [ 3 ]

0 голосов
/ 04 марта 2020

Нет, к сожалению, вы не можете условно импортировать библиотеки. Однако вы можете импортировать обе библиотеки, внедрить обе в ваш конструктор, а затем условно, используя isDevMode(), (isDebugMode () не существует), вы можете использовать то, что предпочитаете для каждого случая.

Это не так хотя это очень хорошее решение, так как оно означает, что вы загрузите обе библиотеки в память, и поскольку вы вставляете их в конструктор, смена деревьев, происходящая во время сборки, не пропустит их.

Если это будет сделано экономно, оно может даже не имеет значения, хотя (отрицательно). Я предлагаю вам оценить объем памяти во время выполнения с помощью инструментов разработчика, и, если есть значительный выигрыш, перевешивающий ручную природу более чистого подхода, просто замените класс Mock в импорте, когда вы закончите разработку функции с использованием этого Mock

.
0 голосов
/ 04 марта 2020

Попробуйте это

exportToExcel() {
    import("xlsx").then(xlsx => {
      // JUST USE THE LIBRARY
    });
  }
0 голосов
/ 04 марта 2020

Нажмите здесь для решения !

Надеюсь, ваша проблема будет решена.

...