2017-04-10 132 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記錄了這種「構建部署」的方法。

相關問題