typescript 项目怎样编译打包发布到 npm, 并且能够让其他项目通过 javascript 和 typescript 使用。
为此写了两个测试项目:
- MarshalW/fake-ts-service ,发布到 npm 的包
 - MarshalW/fake-ts-service-client,使用 face-ts-service 的 js/ts 程序
 
实现 MarshalW/fake-ts-service 需要注意的点:
tsconfig.json
- 可通过命令生成 
tsc --init "compilerOptions"属性下:"module": "ESNext",默认是commonjs"declaration": true,,默认是屏蔽的"declarationMap": true,, 默认是屏蔽的"moduleResolution": "node", 否则 tsc 编译会无法解析包"outDir": "./lib",设置构建输出路径
"include": ["src"]"exclude": ["node_modules", "**/__tests__/*"]
- 可通过命令生成 
 package.json
"main": "lib/index.js","types": "lib/index.d.ts",,为了 typescript 应用引用这个包时的类型定义"files": [ ..,设置打包文件的白名单,这样不会再输出 src
执行:
npm run build,编译生成 javascript,在 lib 目录下npm test,执行测试,验证本地导入和执行模块npm version patch,在确保 git 提交后,设置小版本更新npm publish,发布当前更新的 npm 包
实现 MarshalW/fake-ts-service-client 需要注意的点:
tsconfig.json
"compilerOptions""module": "ESNext","moduleResolution": "node", 否则 tsc 编译会无法解析包"outDir": "./dist"
package.json
"main": "dist/index.js","type": "module",
执行:
npm i,node test.js, 测试 js 代码直接访问 fake-ts-servicenpm run buildnpm start, 测试 ts 代码访问 fake-ts-service