如何在Heroku安装后编译Typescript?

pieyvz9o  于 2023-01-26  发布在  TypeScript
关注(0)|答案(7)|浏览(132)

我不想上传预编译的dist目录,而是想在服务器端编译src。
下面是我在package.json中的脚本:

"scripts": {
    "test": "echo \"No test specified\" && exit 0",
    "start": "node dist/app.js",
    "postinstall": "tsc"
  }

以下是相关性:

"dependencies": {
    "@types/express": "^4.11.1",
    "@types/pg": "^7.4.4",
    "@types/socket.io": "^1.4.31",
    "body-parser": "^1.18.2",
    "express": "^4.16.2",
    "pg": "^7.4.1",
    "socket.io": "^2.0.4",
    "tslint": "^5.9.1",
    "typescript": "^2.7.2"
  }

由于“npm install将在安装期间将node_modules/.bin文件夹添加到PATH环境变量”,Heroku应该能够直接调用它。
但我得到的错误是:

Building dependencies
       Installing node modules (package.json + package-lock)

       > bilgi-yarismasi@1.0.0 postinstall /tmp/build_afa42c7943d4b71d2b48a016ae3b9e50
       > tsc

       sh: 1: tsc: not found
       npm ERR! file sh
       npm ERR! code ELIFECYCLE
       npm ERR! errno ENOENT
       npm ERR! syscall spawn
       npm ERR! bilgi-yarismasi@1.0.0 postinstall: `tsc`
       npm ERR! spawn ENOENT
       npm ERR!
       npm ERR! Failed at the bilgi-yarismasi@1.0.0 postinstall script.
       npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

       npm ERR! A complete log of this run can be found in:
       npm ERR!     /tmp/npmcache.LTxbD/_logs/2018-02-25T10_36_06_374Z-debug.log
-----> Build failed
ut6juiuv

ut6juiuv1#

您需要从npm脚本调用tsc,否则Heroku会尝试查找名为tsc的全局依赖项。
package.json中创建新的npm脚本:

"tsc": "tsc"

现在将"postinstall": "tsc"替换为:

"postinstall": "npm run tsc"
7cwmlq89

7cwmlq892#

类型脚本应作为设备依赖项安装
在您的proc文件中有web: node server.js
确保将npm build添加为安装后脚本
告诉npm typescript安装在本地将修复tsc找不到的问题,因为npm正在尝试在heroku上全局查找它。
像这样。

"tsc": "./node_modules/typescript/bin/tsc",
"build": "tsc",
"postinstall": "npm run build",
ecr0jaav

ecr0jaav3#

我花了一段时间把我的简单打字脚本create-react-app部署到Heroku上。
package.json -根本不需要安装后配置
在命令行中为您的应用程序运行install buildpack:heroku构建包:添加zidizei/打字脚本heroku构建包:添加heroku/节点js
您还可以搜索运行的构建包:heroku构建包:搜索打字脚本
我的服务器如下所示(/root/server.js)

const express = require('express')
const app = express()
const PORT = process.env.PORT || 3000

app.use(express.static('build'));
app.listen(PORT, () => console.log(`Listening on port ${PORT}`))

package.json

"scripts": {
    "start": "node server.js",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }

同样,在推到heroku之前,运行“npm run build”。
我的解决方案不会工作,如果你要使用webpack开发服务器,它必须是自定义服务器,在我的情况下,它是EXPRESS。

xt0899hw

xt0899hw4#

只需将typescript安装为依赖项即可

jljoyd4f

jljoyd4f5#

在package.json中为我

"scripts": {
    "tsc": "./node_modules/typescript/bin/tsc",
    "postinstall": "npm run tsc"
  },

对我有用。

mrwjdhj3

mrwjdhj36#

有2个解决方案,我发现这个问题可行:-
1.将typescript从devDependencies移动到依赖项对象中. json
1.在您的应用上安装一个可以运行ts命令的Heroku构建包。您可以在elements.heroku.com上搜索Heroku构建包。添加过程非常简单。

gblwokeq

gblwokeq7#

我将typescript作为devDependency安装在Package.json中:

"scripts": {
//other scripts
"build": "./node_modules/typescript/bin/tsc",
}

相关问题