引言
这篇文章我其实最想解决的是【如何简单快速打造一个能同时导出cjs
和esm
的npm
包】。在看了网上的各种教程,都没我想要的。要么就是利用rollup
来构建,但是配置问题和兼容性问题又很棘手。最后是在看了typedi的代码仓库,发现很适合我,就借鉴过来了。 因为我的npm
包是在node
端使用的,所以只需要cjs
和 esm类型
的包就行,而ts-node
就刚刚好能满足我的需求,所以我也没有使用其他构建工具。
配置
目录
项目关键文件如下:
- .github:github actions 配置文件
- build:文件夹是打包后的产物,也是发不到 npm 上的文件夹,仓库 src 的文件是不会上传到 npm 的
- cjs:CommonJS 模块的代码
- esm5:ES Modules 模块的代码
- types:类型声明文件
- package.json:对 npm 包的定义说明
- src:项目文件代码
- package.json:对项目文件的定义说明及命令行操作
- tsconfig.json:ts 编译配置主体文件
- tsconfig.esm5.json:编译成 ems5 的编译配置
- tsconfig.cjs.json:编译成 cjs 的编译配置
- tsconfig.types.json:编译成类型声明文件的编译配置
package.json
这是一份最终配置,具体代码:node-agile-client
因为这个package.json
最后会被拷贝到build
文件夹中去,所以以下配置都是基于build
目录下的配置选项
关键参数 | 值 | 备注 |
---|---|---|
main | ./cjs/index.js | commonjs 的入口文件 |
module | ./esm5/index.js | esmodule 的入口文件 |
typings | ./types/index.d.ts | 类型声明的入口文件 |
tsconfig.json
tsconfig.cjs.json
tsconfig.esm5.json
tsconfig.types.json
自动化发布
在项目根目录新建.github/workflows/cd.yml
,并配置github actions
,secrets.NPM_PUBLISH_TOKEN
需要去npm
官网生成token
并配置到github
仓库的Actions secrets
中。
大功告成!
经过以上配置,就可以在github
创建release
版本时触发actions
,将build
文件夹中的压缩包发布到npm
了!