1

我想为我的 .js 文件之一导入一个模块,并使用Vaadin 14调用我的 .js 文件。不幸的是,我在导入它时遇到了困难,并且在浏览器中抛出了ReferenceError 。

我的观点:

@Route(value = "jstest", layout = MainView.class)
@PageTitle("jstest")
@JsModule("./sipcall.js")
@NpmPackage(value = "sip.js", version = "0.15.10")
public class SipJsTest extends Div {
    private Button b;
    public SipJsTest() {
        b = new Button();
        b.setText("Execute SIP.js");
        b.addClickListener(listener -> {
            Page page = UI.getCurrent().getPage();
            page.executeJs("executesipcall()");
        });
        add(b);
    }
}

sipcall.js(模块以这种方式命名)位于frontend/sipcall.js/。如果我做一个简单的控制台输出,函数就会被正确调用。如果我尝试使用导入的模块,则会出现错误。

sipcall.js:

import "sip.js";

window.executesipcall = function() {
    var ua = new SIP.UA(...) // from the imported module, throws exception
}

node_modules/sip.js/包含我使用@NpmPackage导入的模块。该模块也在package.json中列出,带有"sip.js": "0.15.10".

网络控制台错误:

client-4FB121A4CC0177A1068809F06428A755.cache.js:57 未捕获的 ReferenceError: SIP 未在 Object.eval 的 window.executesipcall (vaadin-bundle-6b322b28264dafdccb46.cache.js:4505) 处定义991),:1:1)

任何想法为什么 Vaadin 不识别进口?是不是因为它没有在全局范围内导入(这里提到)?

4

1 回答 1

0

我找到了解决方案。我不得不使用 NodeJs'require()来导入模块而不是import. 它有效,但我不知道为什么。

sipcall.js:

window.executesipcall = function() {
    var sip = require("sip.js");
    var ua = new sip.UA(...)
}

什么是require()?

于 2020-03-06T08:26:56.933 回答