未捕获的引用错误:“类”未定义

问题描述 投票:0回答:1

我目前正在开始研究 NodeJS-Projekts,我的第一个项目应该是 Openlayers-Map 的简单包装类,它应该作为独立的工作。 我根据基本教程整理了我的配置,其中包含我能找到的任何内容,有望帮助解决问题。 但无论我做什么,我都无法让课程正常工作并出现错误:

Uncaught ReferenceError: OpenLayersMap is not defined

以下是问题的极端简化:

请注意,index.js 稍后将包含更多导入。

webpack.config.js

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
    entry: "./src/index.js",
    output: {
        library: { type: "umd" },
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: ["@babel/preset-env"],
                    },
                },
            },
            {
                test: /\.css$/,
                use: ["style-loader", "css-loader"],
            },
        ],
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: "./public/index.html",
        }),
    ],
    devServer: {
        static: path.join(__dirname, "public"),
        compress: true,
        port: 9000,
        open: true,
    },
};

index.js

import OpenLayersMap from "./map";

export default OpenLayersMap;

地图.js

import Map from "ol/Map";
import View from "ol/View";
import TileLayer from "ol/layer/Tile";
import OSM from "ol/source/OSM";

export default class OpenLayersMap {
    constructor(elementId) {
        this.map = new Map({
            target: elementId,
            layers: [
                new TileLayer({source: new OSM()}),
            ],
            view: new View({
                center: [998616.32, 7084710.0],
                zoom: 12,
            }),
        });
    }
}

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>OpenLayers Map</title>
    <style>
        #map {
            width: 100%;
            height: 100vh;
        }
    </style>
</head>

<body>
    <div id="map"></div>
    <script src="bundle.js"></script>
    <script>
       const map = new OpenLayersMap("map")
    </script>
</body>

</html>

以下方法有效:

index.js

import OpenLayersMap from "./map";

document.addEventListener('DOMContentLoaded', () => {
    const map = new OpenLayersMap('map');
});

import OpenLayersMap from './map';

window.createMap = (elementId) => {
    new OpenLayersMap(elementId);
};

但是第一个不允许我自定义目标的 ID,第二个不允许我提供类的实例以供进一步使用,因此我无法使用这些。

javascript node.js webpack
1个回答
0
投票

在 HTML 文件中,确保在脚本加载后访问 OpenLayersMap 类

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>OpenLayers Map</title>
    <style>
        #map {
            width: 100%;
            height: 100vh;
        }
    </style>
</head>

<body>
    <div id="map"></div>
    <script src="bundle.js"></script>
    <script>
        // Ensure the code runs after the bundle is loaded
        window.onload = function () {
            const map = new OpenLayersMap("map");
            console.log("Map instance created:", map);
        }
    </script>
</body>

</html>

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.