我正在尝试在heroku中部署https://github.com/angular/universal-starter的示例。
任务npm启动失败,因为它无法识别ts节点。
有没有办法使用ts-node在heroku上进行部署?
祝你好运 Joao Garin
答案 0 :(得分:2)
您可以使用
创建Procfile
web: npm start
让你的启动脚本运行ts-node
"start": "ts-node src/index.ts",
在依赖项上安装typescript和ts-node
"ts-node": "^3.3.0",
"typescript": "^2.4.2"
答案 1 :(得分:2)
要解决heroku
中与缺少ts-node
有关的问题,您需要在tsc
中使用package.json
命令来构建TypeScript代码。
"scripts": {
...
"build": "tsc",
}
然后在Procfile
中,您可以使用node
命令通过在build
中运行package.json
命令来运行Heroku为您构建的文件。
web: node dist/src/server.js
我个人认为,这是将基于TypeScript的应用程序部署到Heroku的最佳解决方案,如果您还需要tsconfig.json
,可以看看我的。
{
"extends": "@araclx/tsconfig",
"compilerOptions": {
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"noUnusedParameters": false,
"noUnusedLocals": false,
"lib": ["ES2018"],
"module": "commonjs",
"target": "es6",
"noImplicitAny": true,
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist"
}
}
答案 2 :(得分:1)
package.json:
"start":"ts-node index.ts",
"dependencies": { "ts-node" : "~<version number>" }
为我工作:)
答案 3 :(得分:1)
也许我来晚了,但本周我遇到了同样的问题,这就是我通过在网络上收集多个解决方案来解决此问题的方法。希望它可以帮助某人:
将节点和yarn或npm版本添加到package.json
"engines": {
"node": "12.14.0",
"yarn": "1.x"
},
在package.json
"ts-node": "^9.0.0",
"typescript": "^4.1.2"
添加了postinstall
脚本,该脚本在Heroku调用yarn或npm安装后被调用,这将在选定的目标文件夹(本例中为dist)上构建您的应用程序
并更改了开始脚本,以将编译后的应用程序而不是TS用作服务器
"scripts": {
"postinstall": "tsc",
"start": "cross-env NODE_ENV=production node dist/index.js"
},
指向PROCFILE
上的开始脚本
web: yarn start
最后是tsconfig.json
,您可以在其中选择构建目标"outDir": "dist",
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"target": "es2018",
"moduleResolution": "node",
"module": "commonjs",
"sourceMap": true,
"rootDir": "src",
"outDir": "dist",
"lib": ["esnext", "dom", "es2018", "esnext.asynciterable"],
"esModuleInterop": true
},
"exclude": ["node_modules"]
}
答案 4 :(得分:0)
您无法直接将ts-node
部署到heroku。要么建立自己的buildpack,要么只是将打字稿编译成javascript。我推荐后者。只需在发布时运行命令tsc -p .
。
修改您还可以创建名为index.js
的文件并添加以下内容:
require('ts-node/register');
require('./server.ts');
然后它应该工作。不要忘记运行npm install --save-dev ts-node
。
建议不要在生产环境中使用。仅在开发中使用它。
答案 5 :(得分:0)
出于未知原因,Heroku 将 ts-node 修剪为 dev 依赖项,即使您将其列在 dependencies 而不是 devDependencies 中。您应该做的是指示 Heroku 不要使用以下命令修剪 devDependencies:
$ heroku config:set NPM_CONFIG_PRODUCTION=false YARN_PRODUCTION=false