繁体   English   中英

用javascript导入函数

[英]Importing functions in javascript

尝试使用GoJS库时, 出现“导入声明可能仅出现在模块的顶层”错误。

main.html

...
<script id = "code">
    import {makeNodes} from "./make_nodes.js";

    function init(){
       makeNodes(model);
       ...
    }
</script>

<body onload="init()">
...

make_nodes.js

export function makeNodes(model){
    ...
}

正如错误所言,您不能在模块中使用import 您的代码不在模块中。 要使其成为模块,请在script标签中使用type="module"

<script id = "code" type = "module">

但是 ,请注意,对浏览器中模块的本机支持是非常新的 (此外,它在IE中也不起作用,永远不会。)大多数使用import / export语法的人仍然通过编译器和/或打包程序(例如Webpack或Browserifty)来这样做。

一旦这样做, init将不再是全局的,但是您的<body onload="init()">希望init是全局的。 (这是不使用onxyz -attribute风格的事件处理程序的几种原因之一。)要解决此问题,请在代码中挂接事件,从<body>删除onload属性:

function init(){
   makeNodes(model);
   // ...
}
window.addEventListener("load", init);

但是 ,您正在使用的load事件在页面加载过程的非常非常晚的时候发生,等待所有图像和其他资源完成加载。 在大多数情况下, 最好script元素移到文档的最后,即在</body>元素之前,然后立即执行init:

<body>
<!-- presumably there's stuff here ... -->

<script id="code" type="module">
    import {makeNodes} from "./make_nodes.js";

    function init(){
       makeNodes(model);
       // ...
    }
    init();
</script>
</body>

到那时, script标记上方的HTML定义的所有元素都存在并且可以对其进行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM