所以我有标准的文件夹结构
dist/
src/
哪里 src
有我的.ts文件和 dist
有我的.js文件。
(我有 "outDir":"dist"
在我的tsconfig.json文件中,和 "includes"
设置 'src'
)。
注意 那''dist'在我的身上 gitignore
文件,因此它不在版本控制中,因此当它转到Travis或 CircleCI
什么都没有 dist
文件夹,直到我跑 tsc
。
这里是 问题 - 如果我跑 npm install
首先 - 它会失败因为我在package.json中有这个:
"bin":{
"foo" :"dist/cli.js" // dist/cli.js does not exist yet
}
但如果我跑 tsc
首先 - tsc将缺少编译所需的依赖项,如果我运行则会到达 npm install
。
该 只要 我能想到解决这个问题的方法,就是安装所有必要的东西 tsc
依赖首先,然后运行tsc,然后运行 npm install --production
。
然而,这不是最方便的事情。
有没有人遇到这个问题并找到了一个很好的解决方案?
我不记得有这个问题,但至少在一个案例中我做了一些可以解决这个问题的事情。
我将index.js放在根文件夹中,该文件夹运行dist中的实际依赖项。然后npm寻找的bin是一个存在的文件,它不应该吓坏。
当然,直到tsc运行它才会起作用。但它应该解决你的鸡和鸡蛋问题。
看起来像 preinstall
脚本是你需要的
加入你的 package.json
档案为
{
"scripts": {
"preinstall" : "tsc ..." // < build stuff
}
}
参考 https://docs.npmjs.com/misc/scripts
我会签入一个文件 ./lib/cli
文件内容是
#!/usr/bin/env node
require('../dist/cli.js')
然后正常运行npm,然后是tsc。
绝对不是你的答案,但我通常只是喜欢提交javascript。
缺点:大量额外的git历史/膨胀。
我的观点:
- 最后,你正在制作一个javascript项目。因此,应该测试javascript运行时,如果该项目也应该从typescript中使用,请测试生成的
.d.ts
;
- 生成代码的TSC版本不应该是测试和消费者的另一个移动部分。您将测试生成的输出,而不是许多TSC版本的源。
- 通过包含.js和.d.ts减少“活动部分”边界,你获得的收益(=可预测性)远远超过你失去的(git history膨胀)。