我正在尝试在 Heroku中部署Angular Universal Starter的示例。
任务npm start
失败,因为它无法识别 ts-node。
有没有办法使用 ts-node 在 Heroku 上进行部署?
我正在尝试在 Heroku中部署Angular Universal Starter的示例。
任务npm start
失败,因为它无法识别 ts-node。
有没有办法使用 ts-node 在 Heroku 上进行部署?
您可以创建Procfile
一个
web: npm start
并让您的启动脚本运行 ts-node
"start": "ts-node src/index.ts",
并在您的依赖项上安装 typescript 和 ts-node
"ts-node": "^3.3.0",
"typescript": "^2.4.2"
你不能ts-node
直接部署到heroku。要么构建你自己的buildpack,要么只是将 typescript 编译为 javascript。我推荐后者。只需tsc -p .
在发布时运行命令。
编辑您还可以创建一个名为index.js
并添加以下内容的文件:
require('ts-node/register');
require('./server.ts');
然后它应该工作。不要忘记跑步npm install --save-dev ts-node
。
在生产环境中不建议这样做。仅在开发中使用它。
要解决heroku
与丢失相关的问题,您ts-node
需要使用.tsc
package.json
"scripts": {
...
"build": "tsc",
}
然后,Procfile
您可以使用node
命令来运行 Heroku 为您构建的文件,方法是build
在package.json
.
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"
}
}
包.json:
"start":"ts-node index.ts",
"dependencies": { "ts-node" : "~<version number>" }
为我工作:)
也许我迟到了,但本周我遇到了同样的问题,这就是我通过在网络上收集多个解决方案来解决问题的方法。希望它可以帮助某人:
将 node 和 yarn 或 npm 版本添加到package.json
"engines": {
"node": "12.14.0",
"yarn": "1.x"
},
在项目依赖项中添加了 ts-node 和 typescriptpackage.json
"ts-node": "^9.0.0",
"typescript": "^4.1.2"
添加了postinstall
在 Heroku 调用的 yarn 或 npm install 之后调用的脚本,这将在所选目标文件夹上构建您的应用程序(在本例中为 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"]
}
由于未知原因,Heroku将ts-node修剪为 dev 依赖项,即使您将其列在dependencies而不是devDependencies中。您应该做的是指示 Heroku 不要使用以下命令修剪 devDependencies:
$ heroku config:set NPM_CONFIG_PRODUCTION=false YARN_PRODUCTION=false
对于我们的项目,问题是 ts-node只devDependencies
在.package.json
dependencies