2016-05-31 94 views
1

我一直有很多問題讓TypeScript使用import語句正常工作。何時在腳本中使用腳本標記包含JS庫?

例如,我目前正在使用Leaflet構建Angular2應用程序。我已經設法正確加載了一些庫,例如Lodash和Leaflet,但現在我正在努力獲得Leaflet插件,Leaflet.MarkerCluster以正常工作。

我進口的方式如下:

import L from 'markercluster';

我在SystemJS定義如下:

markercluster: 'node_modules/leaflet.markercluster/dist/leaflet.markercluster'

這將導致MarkerCluster文件加載並附加我可以從L.MarkerClusterGroup訪問它,例如,當我在控制檯中測試它時。

但是,當我在TypeScript模塊中運行它時,出現錯誤。我做了一些挖掘,這似乎是由於生成的JavaScript正在運行的方式。生成的JavaScript實際上並沒有試圖訪問L(單張全局對象),而是它的訪問:

var m = new markercluster_1.default.MarkerClusterGroup();

檢查markercluster_1.default,我可以看到它是一個空的對象。不知道如何解決這個問題,但我想這是否值得在這種情況下使用import語句?如果僅僅包含在頁面的頂部,並且在TypeScript文件中使用///<reference path='....'>來嘗試訪問模塊,會更有意義嗎?

回答

1

不知道如何解決這個問題,但我想,如果它使用import語句在這種情況下

我的意見的

  • 轉向從systemjs遠甚至值得。只需使用webpack。
  • 使用require

樣品:

import * as leaflet from "leaflet"; 
// Augment leaflet 
require('./leaflet.markercluster/dist/leaflet.markercluster'); 

// use new feature 
(leaflet as any).MarkerClusterGroup; 

0

我使用Visual Studio代碼編寫角5應用程序,我解決了同樣的問題如下:

import L from 'leaflet'; 
import 'leaflet.markercluster'; 

... 

ngOnInit() { 
    this.map = L.map(this.mapId, options); 
    this.activePOICommonLayer = L.markerClusterGroup().addTo(this.map); 

    //create marker here; 

    this.activePOICommonLayer.addLayer(marker); 
}