2016-02-26 74 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不是函数) –