12

我正在尝试在 Heroku中部署Angular Universal Starter的示例。

任务npm start失败,因为它无法识别 ts-node。

有没有办法使用 ts-node 在 Heroku 上进行部署?

4

7 回答 7

14

您可以创建Procfile一个

web: npm start

并让您的启动脚本运行 ts-node

"start": "ts-node src/index.ts",

并在您的依赖项上安装 typescript 和 ts-node

"ts-node": "^3.3.0",
"typescript": "^2.4.2"
于 2017-08-17T18:02:11.263 回答
2

你不能ts-node直接部署到heroku。要么构建你自己的buildpack,要么只是将 typescript 编译为 javascript。我推荐后者。只需tsc -p .在发布时运行命令。

编辑您还可以创建一个名为index.js并添加以下内容的文件:

require('ts-node/register');
require('./server.ts');

然后它应该工作。不要忘记跑步npm install --save-dev ts-node

在生产环境中不建议这样做。仅在开发中使用它。

于 2015-12-11T23:24:09.677 回答
2

要解决heroku与丢失相关的问题,您ts-node需要使用.tscpackage.json

 "scripts": {
    ...
    "build": "tsc",
  }

然后,Procfile您可以使用node命令来运行 Heroku 为您构建的文件,方法是buildpackage.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"
  }
}
于 2020-08-05T07:16:34.307 回答
2

包.json:

"start":"ts-node index.ts",
"dependencies": { "ts-node" : "~<version number>" }

为我工作:)

于 2017-11-11T19:43:52.517 回答
1

也许我迟到了,但本周我遇到了同样的问题,这就是我通过在网络上收集多个解决方案来解决问题的方法。希望它可以帮助某人:

将 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"]
}
于 2020-12-02T16:36:13.760 回答
0

由于未知原因,Heroku将ts-node修剪为 dev 依赖项,即使您将其列在dependencies而不是devDependencies中。您应该做的是指示 Heroku 不要使用以下命令修剪 devDependencies:

  $ heroku config:set NPM_CONFIG_PRODUCTION=false YARN_PRODUCTION=false
于 2021-07-19T17:10:09.480 回答
0

对于我们的项目,问题是 ts-node只devDependencies在.package.jsondependencies

于 2022-01-28T09:51:44.040 回答