2017-09-07 87 views
4

我在我的項目中使用插件ngx-leafletangular-cli'L'是指UMD全局 - 編譯錯誤

我想作爲文檔的描述使用單張,例如:

enter image description here

問題是,當我試圖編譯我得到了以下錯誤:

enter image description here

編譯時間:

ng serve --aot 

語境這裏:

enter image description here


我曾嘗試使用導入L以不同的方式:

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

但我無法找到文件,也沒有任何github

我沒有刪除所有模塊使用atm編譯,但我需要一個解決方法。

這裏是我使用的package.json:

enter image description here


這裏是我的組件裏面的代碼中,'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 { } 
+1

爲什麼我們可以有實際的代碼?這裏的副本將更好 – Vega

+0

我做了一個編輯代碼 –

回答

10

您錯過了L組件上的L的導入。像這樣:

import * as L from 'leaflet'; 
+0

我面臨同樣的問題......但如果你的回答是正確的,爲什麼我沒有得到編譯錯誤的其他引用L *** *在我的打字稿文件中? – Ronnie

+0

感謝您的回答,儘快嘗試並給您回報:) –

+0

@羅尼,我無法回答。我只是偶然發現了同樣的錯誤,這個解決方案爲我解決了。如果您有任何進一步的解釋,我很樂意更新我的答案。 – pgross

0

克隆角CLI到一個新的空項目後,我通過NPM添加sockjs客戶端。然後我嘗試在NG服務中創建一個SockJS實例。 SockJs僅僅是一個無角兼容NPM包樣本:

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

該編譯罰款,但有一個運行時錯誤,指出

SockJS是不是一個構造函數

一些谷歌上搜索我後無意中發現了類型轉換器https://www.typescriptlang.org/docs/handbook/tsconfig-json.html中的js類型。爲了使它工作,我不得不通過從NPM安裝@ types/sockjs-client來添加類型。發送編譯器錯誤

'SockJS'是指UMD全局,但當前文件是一個模塊。 請考慮添加一個導入。

此錯誤意味着typecript轉碼程序已知類型但未明確導入。您必須導入類型才能明確告訴打字稿,您知道您正在使用外部腳本,這些腳本的存在無法在編譯時通過打​​字稿進行驗證。該包的存在只會在運行時檢查。明確的進口聲明看起來像這樣

import * as SockJsClient from 'sockjs-client'; 
//... 
private socket: SockJsClient.Socket; 
//... 
this.socket = new SockJsClient(this.serverURI); 
+0

是不是完全一樣的導入,但另一個模塊?我沒有看到任何區別。你能否詳細說明它們的區別? – pgross

+0

我想清楚地說明,在角度使用舊的js-libs時會遇到一系列問題,並且行爲是以角度爲目標的。 首先你安裝一個不可用的npm包,然後你會發現打字和安裝類型(或者自己創建它們),然後你得到UMD異常(這也是可以忽略的),這個異常可以通過糾正進口。上面的答案指出我的方向正確,但對我來說並不完全是「如何解決」。我也承認我的答案非常相似。 – LordObi