我正在尝试在 Laravel 5.7 项目中使用 OpenLayers (v5.3.0),但是从 node_modules 导入 ol 时遇到了很多麻烦。
我安装 ol 如下(基于https://www.npmjs.com/package/ol):
npm install ol
然后我更新了我的 resources\js\app.js,它现在只包含以下内容:
require('./bootstrap');
require('ol');
编辑:我还在 resources\js\app.js 中尝试了以下操作,但没有成功:
require('./bootstrap');
const ol = require('ol');
我的 webpack.mix.js 包含以下内容:
const mix = require('laravel-mix');
mix.js('resources/js/app.js', 'public/js/app.js', )
.sass('resources/sass/app.scss', 'public/css');
我在一个名为 map.blade.php 的文件中也有以下相关行,我想在其中显示 OpenLayers 地图:
<script src="{!! mix('js/app.js') !!}"></script>
...
<div id='map' style='z-index: 1; width: 100%; height:calc(100% - 56px);'>
<script>
import Map from 'ol/Map';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import XYZ from 'ol/source/XYZ';
new Map({
target: 'map',
layers: [
new TileLayer({
source: new XYZ({
url: 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png'
})
})
],
view: new View({
center: [0, 0],
zoom: 2
})
});
</script>
</div>
我也跑了npm run dev
。
在 Chrome 中进行测试时,我得到“Uncaught SyntaxError: Unexpected identifier”,指的是 map.blade.php 中的以下行:
import Map from 'ol/Map';
编辑:我还运行了以下命令以确保安装了所有依赖项:
npm install --save-dev parcel-bundler
运行上述程序时我没有收到任何错误,但 Chrome 中的相同错误仍然存在。
编辑:我还尝试将 javascript 从我的 map.blade.php 转移到一个新文件(mapscript.js)中,然后将其导入 map.blade.php(在“map”div 之后),如下所示:
<script src="{!! asset('js/mapscript.js') !!}" type="module"></script>
但后来我收到以下错误:
Uncaught TypeError: Failed to resolve module specifier "ol/Map". Relative references must start with either "/", "./", or "../".
之后,我尝试将以下行移出 app.js 并移入 mapscript.js:
require('ol');
并且还尝试了相同的方法:
const ol = require('ol');
但同样的 Uncaught TypeError 在这两种情况下都存在。
我已经尝试过 Stack Overflow 和其他地方的很多类似问题的解决方案,我也尝试过在 npm 之外使用 ol ,但我没有找到任何可以为我解决问题的方法。我相信使用 npm 和 Mix 是在我的项目中构建 OpenLayers 的最佳方式,但我不知道为什么它不起作用。非常感谢一些帮助。