Heroku使用ts节点进行部署

时间:2015-12-11 12:58:25

标签: angularjs heroku typescript angular

我正在尝试在heroku中部署https://github.com/angular/universal-starter的示例。

任务npm启动失败,因为它无法识别ts节点。

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

祝你好运 Joao Garin

6 个答案:

答案 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节点和打字稿
"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