文章读译自 The 30 second guide to publishing a typescript package to npm,部分内容有修改哈。
这篇文章要求你有一定的 JS 、TS 和 NPM 的知识,如果你写过普通的 NPM 包就更好啦~如果没有的话网上也很多教程的,都很简单~
发布过 npm 包的同学都知道,初始化一个 npm 项目,直接用 npm init -y
就可以了,那如果要用 ts 呢,直接 tsc --init
即可。这两个操作会生成 package.json
和 tsconfig.json
文件。然后我们按以下步骤修改一下配置:
1. 添加 "declaration": true
到你的 tsconfig.json
这行语句告诉 TypsScript 在编译的时候为你自动生成 d.ts
文件。需要注意的是,当你使用私有的类型时,但是这个类型也外部 API 的一部分,这个包的使用者就得不到该类型的类型推断,TS 编译器也会报警告,这时你只需要在该类型前添加 export
即可。
2. 添加 "types": "index.d.ts"
到你的 package.json
当其他人导入你的包的时候,这句话就告诉了 TS 编译器到哪里去寻找类型定义文件。这里的 .d.ts
文件和 main
入口指向的是一个文件夹,所以通常情况下,你的 package.json 会包含下面两行:
"main": "dist/index.js",
"types": "dist/index.d.ts"
(上面默认你在 tsconfig.json
中配置的 outDir
指向的是 dist
目录)
3. 保证你的 dist
目录被添加到了 .gitignore
在我们的代码仓库,一般不需要包含编译后的代码,只需要包含源码即可。所以我们不对 dist
目录做版本管理。并且这也不影响我们发布 dist
目录到 npm。
4. 运行构建命令
运行 tsc
即可编译所有的源码。这非常方便,通常情况下,我们可以添加一条命令到 package.json
:
"build": "tsc"
5. 运行 npm publish
接下来就是要发布到 npm 了,在 package.json
添加以下命令:
"release": "tsc && npm publish"
笔者习惯使用 standard-version
配合 commitizen
来发布 npm 包,感兴趣的同学可以自行了解一下~
如果想要在发布前调试本地包,可以使用 npm link
命令,在此项目根目录执行npm link
, 然后在要调试的 demo 项目中执行 npm link <your package name>
,然后在代码中直接引入使用即可。
下面是完成配置后的 package.json:
{
"name": "my-ts-lib",
"version": "1.0.0",
"description": "My npm package written in TS",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
"build": "tsc",
"release": "tsc && npm publish"
},
"author": "savokiss",
"license": "MIT",
"devDependencies": {
"typescript": "^3.5.3"
}
}
下面是最终的 tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"lib": ["es2017", "es7", "es6", "dom"],
"declaration": true,
"outDir": "dist",
"strict": true,
"esModuleInterop": true
},
"exclude": ["node_modules", "dist"]
}