'L' означает глобальную ошибку компиляции UMD.

Я использую в своем проекте плагин ngx-leaflet и angular-cli.

Я пытаюсь использовать листовку, как описано в документе, например:

введите описание изображения здесь

Проблема в том, что когда я пытаюсь скомпилировать, я получаю следующую ошибку:

введите описание изображения здесь

Составлено с помощью:

ng serve --aot

Контекст здесь:

введите описание изображения здесь


Я пытался импортировать L разными способами, используя:

import { LeafletModule } from '@asymmetrik/ngx-leaflet';

Но я ничего не могу найти ни в документации, ни в github.

Я удалил модуль atm для компиляции, но мне нужен обходной путь.

Вот package.json, который я использую:

введите описание изображения здесь


Вот код внутри моего компонента, пользователя 'L':

@Component({
  selector: 'app-map-screens-element',
  templateUrl: './map-screens-element.component.html',
  styleUrls: [
    './map-screens-element.component.scss',
  ],
})

export class MapScreensComponent implements OnInit {
  /**
   * setting map options
   */
  public $mapOptions = {
    // we use the layer openstreetmap
    layers: [
      L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'),
    ],
    zoom: 15,
    center: L.latLng([48.866667, 2.333333]),
  };
}

И вот импорт модуля в мой проект:

import { LeafletModule } from '@asymmetrik/ngx-leaflet';

@NgModule({
  imports: [
    LeafletModule,
  ],
  declarations: [
    // ...
  ],
  exports: [
    // ...
  ],
})

export class SharedElementModule { }

person Orelsanpls    schedule 07.09.2017    source источник
comment
Почему у нас мог быть настоящий код? Копипаста здесь была бы намного лучше   -  person Vega    schedule 07.09.2017
comment
я сделал правку с кодом   -  person Orelsanpls    schedule 07.09.2017


Ответы (2)


Вам не хватает импорта L поверх вашего компонента. Вот так:

import * as L from 'leaflet';
person pgross    schedule 08.09.2017
comment
У меня такая же проблема ... но если ваш ответ правильный, почему я не получаю ошибок компиляции при других ссылках на L. **** в моем файле машинописного текста? - person Ronnie; 08.09.2017
comment
Спасибо за ответ, попробую как можно скорее и верну :) - person Orelsanpls; 11.09.2017
comment
@ Ронни, я не могу на это ответить. Я просто наткнулся на ту же ошибку, и это решение решило ее для меня. Если у вас есть дальнейшие объяснения, я хотел бы обновить свой ответ. - person pgross; 13.09.2017
comment
@pgross Спасибо, все работает! вы да настоящий mvp - извините за поздний тест - person Orelsanpls; 14.09.2017

После клонирования angular-cli в новый пустой проект я добавил sockjs-client через NPM. Затем я попытался создать экземпляр SockJS в NG-Service вот так. SockJs - это просто образец пакета npm, не совместимого с angular:

import { SockJS } from 'sockjs-client';
//...
private socket: SockJs;
//...
this.socket = new SockJS(this.serverURI);

Это было скомпилировано нормально, но во время выполнения была указана ошибка

SockJS не конструктор

После некоторого поиска в Google я наткнулся на набор текста в angular, чтобы сделать js-типы доступными для транспилятора машинописного текста https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. Чтобы он заработал, мне пришлось добавить типы, установив @ types / sockjs-client из NPM. Это доставило ошибку компилятора

«SockJS» относится к глобалу UMD, но текущий файл является модулем. Вместо этого рассмотрите возможность добавления импорта.

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

import * as SockJsClient from 'sockjs-client';
//...
private socket: SockJsClient.Socket;
//...
this.socket = new SockJsClient(this.serverURI);
person LordObi    schedule 08.11.2017
comment
Разве это не тот же импорт, но для другого модуля? Я не вижу разницы. Не могли бы вы уточнить разницу? - person pgross; 14.11.2017
comment
Я хотел прояснить, что существует цепочка проблем, с которыми можно столкнуться при использовании старых js-libs в angular, и что поведение предназначено для angular. Сначала вы устанавливаете пакет npm, который нельзя использовать, затем вы узнаете о вводе и установке типов (или создаете их самостоятельно), и после этого вы получаете исключение UMD (которое также является независимым), которое может быть решено путем исправления импорта. Вышеупомянутый ответ указал мне правильное направление, но это не совсем то, как решить для меня. Также я признаю, что мой ответ очень похож. - person LordObi; 20.11.2017