Javascript 如何专门编译OpenLayers 3的自定义源代码
我已经为OpenLayers 3创建了一个新的源代码,它的工作方式与类似,但具有修改的请求结构,因为远程源代码不是WMS 当与ol-debug.js一起使用或与OpenLayers库一起编译时,新的源代码可以正常工作 但我想要的是专门编译我的扩展,然后将其作为OpenLayers的扩展包含在我的项目中 比如说Javascript 如何专门编译OpenLayers 3的自定义源代码,javascript,node.js,openlayers-3,Javascript,Node.js,Openlayers 3,我已经为OpenLayers 3创建了一个新的源代码,它的工作方式与类似,但具有修改的请求结构,因为远程源代码不是WMS 当与ol-debug.js一起使用或与OpenLayers库一起编译时,新的源代码可以正常工作 但我想要的是专门编译我的扩展,然后将其作为OpenLayers的扩展包含在我的项目中 比如说 <script src="ol.js"></script> <script src="imageSpecialSource.js"></scrip
<script src="ol.js"></script>
<script src="imageSpecialSource.js"></script>
那么,是否有可能专门编译一个自定义扩展名,然后将其作为一个单独的文件包含?首先,要知道有一个更为更新的教程解释了如何编译OpenLayers 3以及您自己的库。请看这里: 编译过程需要一个
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
部分。这些定义的外部文件允许代码在ol3中使用,而闭包编译器不会抱怨它不知道的类和方法
为了编译没有ol3的代码,您可以将其从lib
部分删除,并在externs
中添加ol3 extern文件。在ol3中,该文件位于build/ol externs.js
中。如果不存在,可以通过运行以下命令生成:
node tasks/generate-externs.js build/ol externs.js
你可以看看OL3谷歌地图库,它就是这样做的。其dist/ol3gm.js
文件不包含OpenLayers:
查看名为ol3gm.json的json配置文件:
. 您将看到,ol externs.js
文件在其中使用。谢谢您的回答。我遵循了链接,我可以看到他们最终可以得到一个包含在脚本标记中的dist文件,但我无法真正了解他们到底采取了什么步骤来结束它。如果能再详细一点,我们将不胜感激。很抱歉这么晚才回复。我再试了一次,但仍然无法创建一个成功的构建,即使包含了extern文件。如果我试图以我的扩展名作为唯一的源代码进行编译,它将由于依赖关系而失败,例如ol.Map等。如果我拥有完整的源代码,但排除了除扩展名以外的所有扩展名,则生成的文件将与我以前的类似,例如ol将抛出错误(未捕获的TypeError:a.cf不是函数)
{
"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"
],
...