部署到 heroku 时出现 vite 错误

Vite error during the deployment to heroku

我的文件夹结构:

我的脚本:

"scripts": {
    "start": "node main.mjs",
    "dev": "NODE_ENV='development' npx nodemon main.mjs",
    "build": "cd client && yarn build",
    "install-client": "cd client && yarn",
    "heroku-postbuild": "yarn install-client && yarn build"
  }

client/package.json

"dependencies": {
    ...
},
"devDependencies": {
    ...
    "@vitejs/plugin-vue": "^2.3.1",
    "typescript": "~4.6.3",
    "vite": "^2.9.1",
    "vue-tsc": "^0.33.9"
}

错误:/bin/sh: 1: vue-tsc: not found

我的猜测是客户端的 devDependencies 未被提取。但是我没有将 NODE_ENV 设置为 production 所以不知道为什么他们没有被获取。

将所有 devDependencies 移动到 dependencies 是个好主意吗?

这可能是由以下两个问题之一引起的:

  • Heroku 正在从生产应用程序中删除 devDependencies
  • Heroku 正在缓存以前构建
  • 中的 node_modules

为了为应用程序创建更小的 slug 大小,Heroku 的 buildpack 将在构建结束时从 package.json 中删除 devDependencies,这样 slug 将只包含列出的依赖项运行时间。

您可以通过 运行:

禁用此依赖性修剪
heroku config:set NPM_CONFIG_PRODUCTION=false

或者,对于 Yarn

heroku config:set YARN_PRODUCTION=false

但如果是这种情况,并且在运行时也使用了缺少的依赖项,那么它应该列在 dependencies 而不是 devDependencies.


Heroku,默认使用 npm ci 而不是 npm i。所以另一种选择是将其切换回来,使用:

heroku config:set USE_NPM_INSTALL=true

并禁用缓存:

heroku config:set NODE_MODULES_CACHE=false

还值得检查一下您是否在 package.json(在 engines 下)中指定了正确的 NPM 和 Node 版本。并且您已经提交了 package-lock.jsonyarn.lock.