【问题标题】:Webpack + babel, ReferenceError: class is not definedWebpack + babel,ReferenceError:未定义类
【发布时间】:2019-09-27 03:16:02
【问题描述】:

我正在编写我的第一个 JS 库,想学习使用 babel 和 webpack。

我遇到的问题是我想在 index.htm 文件中实例化的类(入口点?)导致浏览器抱怨它“未定义”。

这是我的 webpack 配置:

const path = require('path');

module.exports = {
    entry: path.resolve(__dirname, './src/js/FormrEditor.js'),
    output: {
        filename: 'formr-editor.js',
        path: path.resolve(__dirname, 'dist/js'),
    },
    devtool: "source-map",
    module: {
        rules: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: '/node_modules/',
                query: {
                    presets: ['@babel/env']
                }
            }
        ]
    },
};

还有js:

import {Toolbox, ToolboxItem} from "./Toolbox";

export default class FormrEditor{
    constructor(element, config){

        /** Find the element to use as the container */
        if(element instanceof Element)
            this.container = element;
        else
            this.container = document.getElementById(element);

        this.container.classList.add("feditor")

        this.buildEditorDom();
    }

    buildEditorDom()
    {
        let form = document.createElement("div");
        form.classList.add("feditor-form");

        let toolbox = document.createElement("div");
        toolbox.classList.add("feditor-toolbox");

        let handle = document.createElement("div");
        handle.classList.add("feditor-toolbox-handle");

        let testItem = document.createElement("div");
        testItem.classList.add("feditor-toolbox-item");

        toolbox.appendChild(handle);
        toolbox.appendChild(testItem);

        this.container.appendChild(form);
        this.container.appendChild(toolbox);

        this.toolbox = new Toolbox(toolbox);
        this.form = form;
    }
}

所以在我正在做的index.htm 文件中:

<script src="formr-editor.js"></script>
<script>
    import FormrEditor from "./formr-editor";

    var formr = FormrEditor(document.getElementById('editor'), {});
</script>

这就是它抱怨 FormrEditor 没有定义的时候......

更多信息:

我正在从“演示”文件夹中提供 index.htm,其中我有指向 formr-editor.js(webpack 的输出)和 css 的符号链接。

我也按照 MarcRo 尝试了 var formr = new FormrEditor(document.getElementById('editor'), {}); 没有 import ,但我仍然遇到同样的错误。

我已经在课堂上尝试过exportexport default,但什么都没有...

【问题讨论】:

    标签: javascript webpack babeljs


    【解决方案1】:

    您可能需要检查一些事项。

    1. 你不能像这样在浏览器中使用 ES6 导入 - 实际上 import 语句是完全没有必要的。

    2. 您的&lt;script src="formr-editor"&gt; 似乎路径错误。你的 webpacks 输出在 dist/js/formr-editor.js 生成一个文件。如果您想在浏览器中导入未转译的 src 文件,请使用 &lt;script src="src..." type="module"&gt; - 确保也可以访问未转译的文件。

    3. 您如何为公共资产提供服务?您的 formr-editor.js 文件(由 webpacks 生成)是否可访问?

    4. 您想使用 new 关键字调用 FormrEditor 类。

    注意:您可以在浏览器开发工具中检查您的浏览器是否能够加载相应的文件!

    【讨论】:

    • 查看我的编辑。 1)我从 htm 文件中删除了import,但它仍然不起作用。 2) 在与index.htm 相同的文件夹中有指向formr-editor.js 的符号链接。 3) 见 2, 4) 我刚试了一下,没用。当我尝试使用 new FormrEditor(...) 时,Webstorm 抱怨“缺少导入语句”
    • 符号链接可能不够用。如果浏览器无法加载解释它的文件。你可以在你的开发工具中检查你的网络选项卡并查看 formr-editor.js 的服务器响应吗?
    • 200 - 好的。看起来它得到了文件就好了。我什至可以在 chrome/firefox 中看到源代码,它与我刚刚使用 webpack 构建的版本是最新的。
    • 也许尝试将 type=module 属性添加到脚本标签?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2021-09-26
    • 2023-03-10
    • 2019-03-19
    相关资源
    最近更新 更多