2016-02-26 69 views
0

我已經創造了3的OpenLayers一個新的來源,因爲遠程源不是WMS是工作方式類似於ol.source.ImageWMS但經過修改的請求結構的自定義源。如何專門編譯的OpenLayers 3

當與ol-debug.js一起使用或者與OpenLayers庫一起編譯爲custom build時,新的源代碼可以正常工作。

但我想要的是完全編譯我的擴展,然後將其包含在我的項目中作爲OpenLayers的擴展。

例如

<script src="ol.js"></script> 
<script src="imageSpecialSource.js"></script> 

我試圖排除某些庫符號名稱/模式下的JSON配置文件中的出口部分。但包括編譯後的js文件將使OpenLayers發生錯誤。

Uncaught TypeError: a.cf is not a function 

那麼,是否有可能獨自編譯一個自定義擴展,然後將其作爲單獨的文件包含在內?

回答

0

首先,請了解更多最新的教程,該教程解釋瞭如何編譯OpenLayers 3以及您自己的庫。請參閱:http://openlayers.org/en/v3.14.1/doc/tutorials/closure.html

編譯過程需要一個config.json文件。下面是從上面的教程中的配置文件的一個片段:

{ 
    "lib": [ 
    "node_modules/openlayers/src/**/*.js", 
    "node_modules/openlayers/build/ol.ext/**/*.js", 
    "src/**/*.js" 
    ], 
    "compile": { 
    "closure_entry_point": "app", 
    "externs": [ 
     "node_modules/openlayers/externs/bingmaps.js", 
     "node_modules/openlayers/externs/closure-compiler.js", 
     "node_modules/openlayers/externs/geojson.js", 
     "node_modules/openlayers/externs/proj4js.js", 
     "node_modules/openlayers/externs/tilejson.js", 
     "node_modules/openlayers/externs/topojson.js" 
    ], 
    ... 

看到,在它裏面有什麼lib被編在一起,那是的OpenLayers和自己的自定義代碼。

然後,看看externs部分。這些定義的externs文件允許代碼在ol3中使用,而不需要Closure Compiler抱怨它本來不知道的類和方法。

爲了編譯代碼沒有OL3,你可以從lib欄目中刪除,並添加在externsol3 extern file代替。在ol3中,該文件位於build/ol-externs.js。如果沒有的話,你可以通過運行生成它:

node tasks/generate-externs.js build/ol-externs.js

你可以看看OL3 - 谷歌 - 地圖庫,正是這麼做的。它dist/ol3gm.js文件不包含的OpenLayers:https://github.com/mapgears/ol3-google-maps/

看json的配置文件,它被命名爲ol3gm.jsonhttps://github.com/mapgears/ol3-google-maps/blob/master/build/ol3gm.json。你會看到在那裏使用了ol-externs.js文件。

+0

謝謝你的回答。我跟着鏈接,我可以看到他們最終可以包含一個dist文件以包含在腳本標記中,但我無法確切地按照他們做出的步驟來結束。更詳細的描述將不勝感激 –

+0

我更新了答案更多的細節。 HTH。 –

+0

對不起,這麼晚回覆。我再次嘗試,但仍然不能設法創建一個成功的構建,即使包含外部文件。如果我嘗試使用我的擴展作爲唯一源進行編譯,它將因爲依賴關係(即ol.Map等)而失敗。如果我有完整源代碼,但排除除我的擴展名以外的所有文件,則生成的文件將與我所擁有的相似之前,例如OL會拋出一個錯誤(Uncaught TypeError:a.cf不是函數) –