2017-04-10 135 views
0

本地测试时我以前运行:如何将我的Typescript Node.js应用程序部署到Heroku?

"build-live": "nodemon --exec ./node_modules/.bin/ts-node -r dotenv/config -- ./index.ts" 

我后来想通我Procfile应该是这样的:

web: ./node_modules/.bin/ts-node -- ./index.ts 

但它说模块“打字稿”没有找到,即使是在package.json 。我在几个地方读到ts-node不是部署到Heroku的方式,所以我不知道该怎么做。

更新:我想我应该编译它,所以我尝试:

web: ./node_modules/.bin/tsc --module commonjs --allowJs --outDir build/ --sourceMap --target es6 index.ts && node build/index.js 

然而,这成功,实际运行它,一堆我使用得到了林达的“无法找到模块“时......'”。

回答

2

你给Heroku的命令是通过编译index.ts和依赖项在index.js的起始节点启动web“进程”。根据事物的计时方式,index.js在节点启动时可能存在也可能不存在。

您需要在您想要启动应用程序时已经编译了源代码。例如,网络应该是web: node index.js或类似的。

每个构建过程都不相同,因此您需要为自己的设置弄清楚。但是,假设你有一个经典的设置,你可以将它推到git上,然后Heroku选择这个改变并用新的slug更新应用程序。你可以在本地编译东西,并在资源库中包含index.js和任何其他的编译输出,因为它可以在Heroku的slug中使用。

更好的方法是使用与Heroku集成的构建服务器。在那里完成构建之后,将其配置为将构建结果发送到Heroku。 Travis有这样一个直接的设置。这样您就不需要在存储库中包含构建输出,这被认为是反模式。


在sidenode上,尝试使用tsconfig.json来保持tsc配置。这将使您不必在各处写出如此长的命令行。

+0

谢谢。这就说得通了。我从https://github.com/clundie/hello-world-node-typescript-heroku/blob/master/Procfile借用了Procfile,但看起来这是不好的做法,现在将是学习如何像特拉维斯一样使用CI。 如果您有任何建议,我现在遇到了tsc吹出我的文件夹之一的问题:http://stackoverflow.com/questions/43320132/how-to-require-this-file-with-tsc-tsc -seems到跳过的折射率那么它-不能待 – kayla

1

或者你可以有打字稿编译为安装后钩和运行node build/index.js为唯一Procfile命令:

package.json应包含被npm install后,节点处理之前执行的安装后提示启动:

"scripts": { 
    "start": "node build/index.js", 
    "build": "tsc", 
    "postinstall": "npm run build" 
} 

然后,您可以留下您的Procfile的是:

web: npm start 

Heroku here记录了这种“构建部署”的方法。

相关问题