答案 0 :(得分:0)
[更新] 请参阅https://github.com/openlayers/openlayers/issues/5623
我问自己同样的问题。 直到有一个工作版本,你可以使用旧的闭包编译器openlayers dist从他们的GitHub repo做同样的事情。 您需要更改UMD包装器以执行您想要的操作。查看tasks / build.js并应用以下补丁或自行更改。
@@ -15,19 +15,10 @@ var generateExports = require('./generate-exports');
var log = closure.log;
var root = path.join(__dirname, '..');
-var umdWrapper = ';(function (root, factory) {\n' +
- ' if (typeof exports === "object") {\n' +
- ' module.exports = factory();\n' +
- ' } else if (typeof define === "function" && define.amd) {\n' +
- ' define([], factory);\n' +
- ' } else {\n' +
- ' root.ol = factory();\n' +
- ' }\n' +
- '}(this, function () {\n' +
- ' var OPENLAYERS = {};\n' +
- ' %output%\n' +
- ' return OPENLAYERS.ol;\n' +
- '}));\n';
+var umdWrapper = 'var OPENLAYERS = {};\n' +
+ '%output%\n' +
+ '\n' +
+ 'export default OPENLAYERS.ol;';
var version;
更改后,您可以运行
make install
make build
生成的文件build / ol.js将包含您要导入的所有代码。您可以像这样使用它,然后:
<script type="module">
import ol from './ol.js'; // ← url to ol.js
// do classic ol stuff here :)
</script>
但除此之外我还没有看到有效的发布。
如果您确实希望采用更模块化的方法。您必须等到openlayers所需的所有模块都写为ES6模块或者完成ES6构建。您可以将openlayers源转换为通过URL导入,然后您可以执行以下操作:
import olMap from './ol/map.js';
import olTile from './ol/tile/tile.js'; // and so on...
我不确定OpenLayers最终会如何做到这一点,因为后来的方法可能会在您的服务器上造成数百个请求...不确定这是否是比捆绑的更好的解决方案。