创建一个可以在浏览器和nodejs中使用的typescript库

2023-11-23

我想创建一个可以在浏览器和 Nodejs 中使用的库。为了便于讨论,我们假设这是我的图书馆:

export default class MyClass {
    public getString(): string {
        return "Message";
    }
}

截至目前,浏览器不支持 ES2015 模块,我不想在浏览器中依赖 requirejs 或任何其他模块加载器 - 我希望仅通过使用生成的 .js 文件来使用该库script标签。感觉我想要的可以通过使用内部模块来实现(我不想污染全局命名空间)。 但是当我将代码包装在namespace/module我很难将其编译为 commonjs 模块。

实现我想要的目标的正确方法是什么?或者,也许,作为一个打字稿和 JavaScript 菜鸟,我完全脱离了轨道?


我想你需要的是UMD. With tsconfig.json含有

{
  "compilerOptions": {
    "module": "umd"
  },
}

生成的 JavaScript 将如下所示:

(function (factory) {
        if (typeof module === 'object' && typeof module.exports === 'object') {
            var v = factory(require, exports); if (v !== undefined) module.exports = v;
        }
        else if (typeof define === 'function' && define.amd) {
            define(["require", "exports"], factory);
        }
    })(function (require, exports) {
        "use strict";
        var MyClass = (function () {
            function MyClass() {
            }
            MyClass.prototype.getString = function () {
                return "Message";
            };
            return MyClass;
        }());
        exports.__esModule = true;
        exports["default"] = MyClass;
    });

它适用于节点(CommonJS)以及浏览器(CommonJS、AMD)。允许您的库的用户通过以下方式将其包含在内:script标签,你需要模块捆绑器 like Webpack, 浏览器化 or Rollup。这些将生成具有全局导出的 UMD 定义,因此库的主文件的默认导出将可作为全局范围内的某个变量使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建一个可以在浏览器和nodejs中使用的typescript库 的相关文章

随机推荐

  • 使用注释生成 equals / hashcode / toString

    我相信我在某处读到人们在编译时 使用 APT 通过确定哪些字段应该是哈希 相等测试的一部分来生成 equals hashcode toString 方法 我在网上找不到类似的东西 我可能梦见过它 可以这样做 public class Per
  • Or 与 OrElse

    有什么区别or and OrElse if temp is dbnull value or temp 0 产生错误 未为类型 DBNull 和类型 Integer 定义运算符 而这个就像一个魅力 if temp is dbnull valu
  • Expect 中的正则表达式

    我刚刚开始学习期望脚本 我一直在尝试从输出中提取以下内容 core 4046140998 01 10 133211 使用以下命令使用期望脚本 有人可以告诉我哪里出了问题吗 我想将整个字符串 即 core 4046140998 01 10 1
  • spring boot https PKCS12 DerInputStream.getLength(): lengthTag=111,太大

    我需要在 https 上使用 Spring boot 应用程序 我有一个 LetsEncrypt 签名的密钥 我将此证书转换为 PKCS12 如下所示 openssl pkcs12 export in fullchain pem inkey
  • 为什么 PL/SQL 中不允许静态 ddl?

    在 Oracle PL SQL 块中 为什么允许动态 sql begin execute immediate drop table table name end 但静态不是吗 begin drop table table name end
  • pyspark,比较数据框中的两行

    我试图将数据帧中的一行与下一行进行比较 以查看时间戳的差异 目前数据如下 itemid eventid timestamp 134 30 2016 07 02 12 01 40 134 32 2016 07 02 12 21 23 125
  • 在没有框架的情况下路由 REST 请求?

    我一直在阅读这篇文章来学习如何构建 REST API http www gen x design com archives create a rest api with php 有一次它说 假设您已将请求路由到用户的正确控制器 如果没有框架
  • 在张量流中使用 SSIM 损失函数处理 RGB 图像

    我想用SSIM指标作为我正在研究的模型的损失函数张量流 SSIM 应该测量去噪自动编码器的重构输出图像与输入未损坏图像之间的相似度 RGB 据我了解 为了在张量流中使用 SSIM 指标 图像应该是归一化为 0 1 或 0 255 而不是 1
  • 在 C++11 及以上版本中如何检查线程是否完成工作?

    如何在 C 11 及更高版本中检查线程是否已完成工作 我一直在阅读文档并编写了以下代码 include
  • phpMyAdmin - 波浪号 (~) 在行列中意味着什么?

    我最近升级了 Joomla 从 1 5 到 1 7 的安装 带有大量文章数据集 而升级方法是升级数据库 基本上将内容插入到另一个表中 我注意到Rows列值以波形符 为前缀 现在 乍一看 我认为这意味着该值是近似值 因为当我刷新页面时 我看到
  • java中如何从系统字体中获取ttf字体数据

    我的系统上安装了一些 ttf 字体 我使用得到该列表 GraphicsEnvironment getLocalGraphicsEnvironment getAvailableFontFamilyNames 这不仅是 ttf 字体 而且是我猜
  • 如何在 Angular2 中实现可折叠侧边栏?

    我正在学习 angular2 并希望实现一个可折叠的侧边栏 类似于https almsaeedstudio com themes AdminLTE index2 html 在 Angular 2 中 我尝试查找示例 但找不到任何示例 您能提
  • PHP/PostgreSQL:检查准备好的语句是否已存在

    我将准备好的声明创建为 pg prepare stm name SELECT 今天 我在两次声明同名的准备好的语句时遇到了问题 错误地调用了两次函数 Warning pg prepare function pg prepare Query
  • 已添加片段:DateDialog

    我已经让我的editText可点击 点击后会显示DatePicker dialog public void onCreate Bundle savedInstanceState super onCreate savedInstanceSta
  • 在chrome中,使用window.Clipboard对象,有没有办法捕获粘贴的文本?

    您可以捕获图像 我正在尝试找出如何捕获文本 出于安全原因 我猜没有 但我想确定一下 还有这个东西有参考吗 window Clipboardobject 不是 v8 引擎的一部分 它是 chrome 浏览器的一部分 我找不到它的官方文档 在您
  • 有没有更好的方法来进行 C 风格的错误处理?

    我正在尝试通过编写一个简单的解析器 编译器来学习C 到目前为止 这是一次非常有启发性的经历 但是 由于具有强大的 C 背景 我在调整方面遇到了一些问题 特别是缺乏例外情况 现在我已经读过了更干净 更优雅 更难辨认我同意那篇文章中的每一个字
  • 在 group by 子句中连接数组

    我们在将数组分组为单个数组时遇到问题 我们希望将两列中的值连接到一个数组中 并将这些多行数组聚合起来 给定以下输入 id name col 1 col 2 1 a 1 2 2 a 3 4 4 b 7 8 3 b 5 6 我们想要以下输出 a
  • 部分专门针对错误类型的非类型模板参数

    考虑以下 template
  • 数据类型包含 Z3 中的集合

    如何创建包含一组其他对象的数据类型 基本上 我正在执行以下代码 define sort Set T Array Int T declare datatypes A f1 cons value Int b Set B B f2 cons id
  • 创建一个可以在浏览器和nodejs中使用的typescript库

    我想创建一个可以在浏览器和 Nodejs 中使用的库 为了便于讨论 我们假设这是我的图书馆 export default class MyClass public getString string return Message 截至目前 浏