如何专门编译的OpenLayers 3
我已经创造了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
那么,是否有可能独自编译一个自定义扩展,然后将其作为单独的文件包含在内?
首先,请了解更多最新的教程,该教程解释了如何编译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
栏目中删除,并添加在externs
的ol3 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.json
: https://github.com/mapgears/ol3-google-maps/blob/master/build/ol3gm.json。你会看到在那里使用了ol-externs.js
文件。
谢谢你的回答。我跟着链接,我可以看到他们最终可以包含一个dist文件以包含在脚本标记中,但我无法确切地按照他们做出的步骤来结束。更详细的描述将不胜感激 –
我更新了答案更多的细节。 HTH。 –
对不起,这么晚回复。我再次尝试,但仍然不能设法创建一个成功的构建,即使包含外部文件。如果我尝试使用我的扩展作为唯一源进行编译,它将因为依赖关系(即ol.Map等)而失败。如果我有完整源代码,但排除除我的扩展名以外的所有文件,则生成的文件将与我所拥有的相似之前,例如OL会抛出一个错误(Uncaught TypeError:a.cf不是函数) –