TypeScript项目中package.json的main参数配置方法
核心结论先给你
main参数必须指向编译后的dist/index.js,这是TypeScript NPM包的标准做法,下面逐个解答你的疑问:
应该配置index.ts还是index.js?
选dist/index.js。Node环境默认只认JS文件,用户安装你的包后,不需要额外配置TypeScript就能直接导入使用。如果配置index.ts,只有本身在用TS的用户才能正常导入,这会大幅限制包的适用范围,完全不符合NPM包的发布规范。如果配置index.ts是否需要编译?
就算你硬要配置index.ts,也必须提前把它编译成JS文件——但这毫无意义,普通JS用户还是用不了。别这么做,完全是给自己和用户添乱。index.js是否需要指向dist/目录?
是的,必须指向dist/下的JS文件。你的TS源码在src/,编译产物在dist/,发布时要把dist/目录包含进NPM包(可以通过package.json的files字段声明["dist/"],或者确保.npmignore没排除它)。用户要导入dist/mylist.js的类,必须配置main吗?
main是包的主入口,但不是唯一入口。用户可以直接通过import { MyList } from 'your-package/dist/mylist'导入子模块,但这种写法不够友好。更规范的是在package.json里配置exports字段,明确导出各个子模块:"exports": { ".": "./dist/index.js", "./mylist": "./dist/mylist.js" }这样用户就能用更简洁的
import { MyList } from 'your-package/mylist'导入,体验更好。
TypeScript NPM包的额外规范
- 在
tsconfig.json里设置outDir: "dist",确保编译产物都输出到dist目录;开启declaration: true,生成.d.ts类型文件,给TS用户提供类型提示。 - 在
package.json里配置types字段,指向dist/index.d.ts,让TS工具能自动识别类型定义。 - 发布前别忘把
src/目录排除在NPM包外(可以加到.npmignore),只发布dist/和必要的配置文件(比如package.json、README.md)。
内容的提问来源于stack exchange,提问作者vesii

