【问题标题】:Javascript library without using an import in the script tag在脚本标签中不使用导入的 Javascript 库
【发布时间】:2022-01-13 10:41:41
【问题描述】:

我尝试使用 typescript 创建一个库,并且我想使用一个静态方法,该方法允许我渲染一些 HTML 内容,这些内容是基于我传递给该函数的参数的 api rest 调用返回给我的,现在有一种使用架构(例如模式存储库)创建它的方法,编译它,然后像下面的代码一样使用它(当然是 js 格式)?

<div id="test"></div>

<script scr="../myLybrary.js"></script>
<script type="module">

    MyLibrary.render({
        param: "test",
        param1: "test",
        param2: "test"
    }, "test")

</script>

目前要创建这种情况,我必须在脚本中使用导入,其中对静态方法的调用以这种方式驻留:

import MyLibrary from './myLybrary.js'

有什么办法可以避免这最后一步吗?

感谢任何想帮助我的人。

【问题讨论】:

    标签: javascript html typescript es6-modules script-tag


    【解决方案1】:

    目前要创建这种情况,我必须在脚本中使用导入,其中对静态方法的调用以这种方式驻留:

    import MyLibrary from './myLybrary.js'
    
    

    这通常是正确的做法。您只需删除第一个 script 标记,因为使用它您最终会加载您的库两次。所以这给我们留下了:

    <div id="test"></div>
    
    <!-- Note: No `script` tag for `myLybrary.js` here. -->
    <script type="module">
        import MyLibrary from "./myLybrary.js";
    
        MyLibrary.render({
            param: "test",
            param1: "test",
            param2: "test"
        }, "test");
    
    </script>
    

    加载模块会运行模块中的顶级代码,因此如果myLybrary.js 具有加载某些资源的顶级代码,则该代码将在处理import 声明时运行。

    【讨论】:

    • 事实上,该库是通过 cdn 向用户提供的,因此无法从 npm 下载它,因此我需要首先尝试并尝试删除第二种,前提是显然可行……
    • @Maury8788 - 没有理由不能从 CDN 加载模块,例如:import MyLibrary from "https://some-cdn.net/myLybrary.js";
    • 哇我不知道这个东西我当时尝试测试它,它适合你作为这种情况的开发方法还是你必须推荐其他方法?
    • @Maury8788 - 对我来说,这与您从 CDN 加载代码的任何其他时间相同。它的优势在于它来自 CDN,它可能具有边缘位置,因此速度非常快;它的缺点是如果 CDN 关闭或无法访问,您的页面将无法工作。它是一个模块的事实并不重要。但另外,我不希望 library 触发负载的副作用(从其他地方下载资源)。相反,我希望它提供某种我会调用的初始化方法。所以那部分有点不寻常(对我来说)。
    • 我明白了,非常感谢您的提示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 2021-11-04
    • 2018-05-24
    相关资源
    最近更新 更多