前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Typescript NPM 制包/发包流程一步通

Typescript NPM 制包/发包流程一步通

作者头像
老麦
发布2025-03-04 21:30:39
发布2025-03-04 21:30:39
8700
代码可运行
举报
文章被收录于专栏:Go与云原生Go与云原生
运行总次数:0
代码可运行

大家好, 我是 老麦, 一个运维老兵, 现在专注于 Golang,DevOps,云原生基础设施建设。

Typescript NPM 制包/发包流程一步通

建议点击 查看原文 查看最新内容。

原文链接: https://typonotes.com/posts/2025/03/01/intro-of-npm-package-publish/

NPM 发包

npm 发包必须要注册一个 npm registry 的账号。 包名全局唯一

  1. 访问 https://www.npmjs.com/ 并注册一个账号
  2. 本地登录
代码语言:javascript
代码运行次数:0
复制
$ npm login
  1. 发布
代码语言:javascript
代码运行次数:0
复制
$ npm publsh

包的定义

package.json 中管理 包的定义

代码语言:javascript
代码运行次数:0
复制
{
  "name": "ioredis-client", // 包名
  "version": "1.0.7", // 版本
  "main": "dist/index.js", // 默认入口文件。 指定后, 可以直接使用包名。
  "types": "dist/index.d.ts", // ts 默认类型文件。
  "files": [  // files 指定上传哪些文件。 
    "dist"
  ],
  "type": "commonjs", // 包类型, commonjs 或者 module
  // ...
}

其他类似 author, license, keywords, repository 等关键字, 可以参考开源公共库 ioredis package.json[1]

NPM 制包: ioredis 单例/集群 客户端

基于 typescript

  1. 使用 npm init 并安装 typescript 依赖
代码语言:javascript
代码运行次数:0
复制
$ npm init
$ npm install -D typescript

配置 tsconfig.json

代码语言:javascript
代码运行次数:0
复制
{
    "compilerOptions": {
        "rootDir": "./src",  // 源文件目录
        "outDir": "./dist",  // 编译后的目标文件目录

        "target": "ES2019",  // 编译成 js 的版本。 
        "module": "commonjs", // 包管理模式。

        "strict": true,   // ts 严格模式
        "declaration": true,  // 生成 ts 声明文件  xxx.d.ts
        "moduleResolution": "node",  // 包解析器

        "lib": [  // library: 基于 ioredis 包源文件。 
            "es2019",
            "es2020.bigint",
            "es2020.string",
            "es2020.symbol.wellknown"
        ],

        "moduleDetection": "force", 
        "skipLibCheck": true,
        "forceConsistentCasingInFileNames": true,
        "noPropertyAccessFromIndexSignature": false
    }
}
  • moduleResolution: https://www.typescriptlang.org/tsconfig/#moduleResolution

TroubleShoot

1. ES Module ... in a cycle

tsconfig.json 中的 module 为非 commonjs 的时候, Connot require() ES Module ... in a cycle 错误。

代码语言:javascript
代码运行次数:0
复制
// tsconfig.json
    "module": "ESNext", // 非 commonjs

不知道是否是由于 ioredis 的模式引起的。 参考 ioredis 的 tsconfig.json[2] 之后, 修改为 commonjs 后, 问题解决。

2. IORedisClient is not a constructor

代码语言:javascript
代码运行次数:0
复制
import IORedisClient from 'ioredis-client'

const endpoint = 'redis://:dummypass@localhost:6379/1';
const rc = new IORedisClient(endpoint)

当没有直接导出 ioredis.ts 的时候, 没有为 commonjs 配置 exports 的时候, 遇到当前问题

解决方法: 创建一个 index.ts 管理 统一导出 的问题。

代码语言:javascript
代码运行次数:0
复制
// index.ts

// for commonjs
exports = module.exports = require("./lib/ioredis").default;

// for module
export { default } from "./lib/ioredis";
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 熊猫云原生Go 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Typescript NPM 制包/发包流程一步通
    • NPM 发包
      • 包的定义
    • NPM 制包: ioredis 单例/集群 客户端
    • TroubleShoot
      • 1. ES Module ... in a cycle
      • 2. IORedisClient is not a constructor
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档