将 Typescript 2.3 模块发布到 NPM 以供 Angular 4 使用

2023-12-31

里面有相关说明在 Typescript 中编写 NPM 模块 https://stackoverflow.com/questions/30928253/writing-npm-modules-in-typescript,但是它已经过时了,现在有很多不同的答案,这些答案可能适用于 Angular,也可能不适用于 Angular。 Jason Aden 也有一个非常好的演讲关于如何发布 Angular 组件,但在这种情况下,我只对发布普通打字稿类感兴趣。


我完成了一个原型来测试这一点。我使用的代码来自本文 - 创建用 typescript 编写的 npm 模块 https://medium.com/@nahush.farkande/creating-npm-modules-written-in-typescript-8d3cb4e65783以及来自的汇总建议.

请注意,tsconfig-cjs.json其中一部分是为了除了支持 webpack 和 Angular 之外,我们还支持 commonjs + es5 工作流程。

Github 存储库

TS模块制作人项目 https://github.com/oleersoy/tsmproducer

Steps

项目设置

Initialize the Project (The TS Module Producer)
mkdir tsmproducer
cd tsmproducer
# Initialize the project's package.json
npm init -y

Replace package.json:

    {
      "name": "tsmproducer",
      "version": "1.0.0",
      "description": "Example typescript npm project supporting es6 modules via the module package.json attribute as well as commonjs",
      "main": "target/main/cjs/index.js",
      "types": "target/main/esm/index.d.ts",
      "module": "target/main/esm/fesm.js",
      "scripts": {
        "build-cjs": "rm -rf target/main/cjs && tsc -p tsconfig-cjs.json",
        "build-esm": "rm -rf target/main/esm && tsc -p tsconfig-esm.json && rollup target/main/esm/index.js -o target/main/esm/fesm.js",
        "build-all": "npm run build-cjs && npm run build-esm"
      },
      "keywords": [
        "typescript",
        "commonjs",
        "npm",
        "modules",
        "es6",
        "es2015",
        "publishing",
        "rollup",
        "treeshaking"
      ],
      "author": "Ole Ersoy",
      "license": "MIT",
      "devDependencies": {
        "rollup": "^0.41.6",
        "typescript": "^2.3.4"
      }
    }

下载依赖项

npm i
npm i -g rollup
npm i -g typescript    


# Make typescript source directory
mkdir -p src/main/ts

为 es6 和 commonjs 创建 typescript 编译器设置

# tsconfig-esm.json

    {
        "compilerOptions": {
            "declaration": true,
            "module": "es2015",
            "target": "es5",
            "rootDir": "src/main/ts",
            "outDir": "target/main/esm"
        },
        "exclude": [
            "node_modules"
        ]
    }

# tsconfig-cjs.json

  {
      "compilerOptions": {
          "module": "commonjs",
          "target": "es5",
          "rootDir": "src/main/ts",
          "outDir": "target/main/cjs"
      },
      "exclude": [
          "node_modules"
      ]
  }

创建打字稿测试导出:

# src/main/ts/printSubtract.ts

    export function printSubtract(...numbers: number[]) {
        console.log(`Subtracting the numbers: ${numbers.join(', ')}`);
    }

# src/main/ts/printAdd.ts

    export function printAdd(...numbers: number[]) {
        console.log(`Adding the numbers: ${numbers.join(', ')}`);
    }

# src/main/ts/index.ts

    export * from './printAdd';
    export * from './printSubtract';

Compile

npm run build-all

创建消费者项目

mkdir tsmconsumer (TS Module Consumer)
cd tsmconsumer
npm init -y
npm i ../tsmproducer

创建模块消费者

touch index.ts

In index.ts尝试以下操作:

    import {printAdd, printSubtract} from 'tsmproducer';
    printAdd(1, 2);
    printSubtract(2, 1);

Summary

  • rollup 生成的 FESM(Flat EcmaScript 模块)通过以下方式公开package.json's module属性。
  • 生成 Typescript 声明文件并将其放置在target/main/esm目录并通过以下方式公开package.json's types属性。
  • CommonJS 模块支持通过启用package.json's main属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Typescript 2.3 模块发布到 NPM 以供 Angular 4 使用 的相关文章

随机推荐

  • gdb:退出程序而不退出gdb

    我正在使用 gdb 调试程序 首先 我load我的可执行文件 然后我continue运行程序 我有时想中断程序的执行 所以我这样做Ctrl C 我的问题是这关闭了both我的程序和gdb 如何在不退出 gdb 的情况下退出程序 您是否尝试过
  • rufus 调度程序未在生产中运行

    我有一个在 nginx 和乘客下运行的 Rails 服务器 我的sheduler rb看起来像这样 require rufus scheduler my awesome job Rufus Scheduler new my awesome
  • 有没有办法在结果查询中显示“是”或“否”而不是 0 或 1? [复制]

    这个问题在这里已经有答案了 我正在尝试创建一个查询 当我选择一行且一列为 0 时 它显示 否 如果为 1 则显示 是 这是一个示例表 SELECT FROM NUMBERS RESULT PRODUCT HAS APPLES 0 GRAPE
  • 当2的幂时如何将除法变成按位移位?

    我有以下需要经常做的划分 int index pos 64 在 CPU 级别 除法可能会很昂贵 我希望有一种方法可以通过按位移位来做到这一点 我还想了解如何从除法到移位 换句话说 我不想只记住按位表达式 int index pos gt g
  • 重命名后项目崩溃

    如果我在 XCode 中的导航器视图中更改 iOS 项目的名称 Xcode 4 中的 Project gt Rename 相当于什么 https stackoverflow com questions 6077876 what is the
  • 如何使用 jQuery animate() 方法使 div 左右移动?

    请看一下这个 http jsfiddle net tmPfV http jsfiddle net tmPfV 如果您单击右侧 则该框将向右移动 如果您单击左侧 则该框将向左移动 但是 如果您再次单击右键 则什么也没有 我怎样才能让它左右移动
  • 尝试解码数据(将 Abs 导出到 MySQL)

    我有数据库表 DROP TABLE translation en lt CREATE TABLE translation en lt id INTEGER lt translation WIDEMEMO BLOBBlockSize 1024
  • 如何使用 Log4j 和 Storm Framework 将日志写入文件?

    我在 Storm 中使用 log4j 记录到文件时遇到了一些问题 在提交我的拓扑之前 即在我的主要方法中 我编写了一些日志语句并使用以下方法配置了记录器 PropertyConfigurator configure myLog4jPrope
  • 组装键盘IO口

    我看过以下内容topic https stackoverflow com questions 219120 x86 assembly protected mode keyboard access 我有兴趣通过 IN OUT 指令联系键盘并设
  • Spring Web Flow - 如何使用对话范围中已有的值设置单元测试?

    我正在开发一个使用 Spring Web Flow 2 0 的项目 我正在尝试对从决策状态开始的流程进行单元测试 决策状态检查位于conversationScope 我不知道如何将值插入到conversationScope用于单元测试 我努
  • 根据系统动态判断整数类型(c++)

    我正在编写一个程序 以每 32 位 即一次 4 个字节 为单位将数据存储到文件中 我在64位Windows系统中编写代码 但我使用的编译器是32位 mingw32 在当前系统中 int和long的大小是相同的 都是32位 4字节 我目前正在
  • 使用 AWK 将多个文件中的列添加到 csv 表

    我希望通过使用 AWK 从多个文件中获取值来构建 csv 表 我让它处理两个文件 但我无法扩展它 我目前正在获取第二个文件的输出 并附加第三个文件 依此类推 以下是示例文件 file1 file2 file3 file4 100 45 1
  • 无法安装包收缩[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我跑了 pip install contractions in jupyter notebook并且无法安装库收缩并显示
  • 模式同义词签名:必需与提供的约束

    我想我明白了 不寻常形式 的约束 https downloads haskell org 7Eghc 8 10 5 docs html users guide glasgow exts html typing of pattern syno
  • Reactjs - 输入默认值已设置但未显示

    注意到一些奇怪的现象 即为输入设置了 defaultValue 但有时刷新页面时它不可见 我尝试过 console log 然后组件在加载数据时重新渲染多次 在最后一次重新渲染时 组件包含所需的值 如屏幕截图所示 但未显示 知道为什么吗 谢
  • 关闭 GDB 中设置断点的确认[重复]

    这个问题在这里已经有答案了 在共享库上设置断点 gdb b file c 278 No symbol table is loaded Use the file command Make breakpoint pending on futur
  • 文本编辑器告诉光标位置的索引

    我需要一个文本编辑器来告诉我光标的位置 这样我就可以确定要加载到字符串中的文本范围 不幸的是 我尝试过的文本编辑器 TextWrangler Aquamacs EditPad 只告诉我光标所在的行号以及该行上的字符索引 我需要从文件开头到该
  • 如何聚合来自异步生产者的数据并将其写入文件?

    我正在学习 C 中的异步 等待模式 目前我正在尝试解决这样的问题 有一个生产者 硬件设备 每秒生成 1000 个数据包 我需要将这些数据记录到文件中 该设备只有一个ReadAsync 一次报告单个数据包的方法 我需要缓冲数据包并按照它们生成
  • 将用户身份验证详细信息存储在单独的表中的优点

    我在 mysql 中有一个用户表 其中包含所有用户数据 名字 姓氏 地址等 但是我是否应该将身份验证详细信息存储在另一个表 用户名 密码 中并通过用户 ID 链接这两个表 这其中有什么道理吗 是不是更安全 或者它只是添加额外的编码 这其中有
  • 将 Typescript 2.3 模块发布到 NPM 以供 Angular 4 使用

    里面有相关说明在 Typescript 中编写 NPM 模块 https stackoverflow com questions 30928253 writing npm modules in typescript 但是它已经过时了 现在有