Vercel 节点依赖项未安装

问题描述 投票:0回答:2

我正在尝试在 vercel 上部署

node.js
express
应用程序。然而,我得到了
ERROR Cannot find module
- 尽管它们被列在
package.json
中。


初始部署成功。但是,当我安装两个新的依赖项时遇到了问题。

我添加了两个依赖项,

@google-cloud/storage
multer
。当我再次部署时,
vercel
记录了
ERROR Cannot find module '@google-cloud/storage'
。更改导入顺序,
multer
也是如此。

我仔细检查了

package.json
package_lock.json
是否具有这些依赖性。他们确实如此。

  "dependencies": {
    "@google-cloud/storage": "^6.5.2",
    "body-parser": "^1.20.0",
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "dotenv": "^16.0.3",
    "express": "~4.16.1",
    "helmet": "^6.0.0",
    "multer": "^1.4.5-lts.1"
  },
  "devDependencies": {
    "@types/jest": "^26.0.23",
    "jest": "^27.0.3"
  }

我仔细检查了这就是 Vercel 服务器上实际运行的内容。

importError.packageJsonData = fs.readFileSync(`${process.cwd()}/package.json`, 'utf8');

服务器上的

package.json
列出了这些依赖项。

当我这样做时,我还记录了

node_modules
中的内容。

    importError.nodeModulesDirectory = fs.readdirSync(`${process.cwd()}/node_modules`, { withFileTypes: true })
    .filter((item) => item.isDirectory())
    .map((item) => item.name);

服务器上的

node_modules
确实没有
@google-cloud/storage
multer

我认为这是某种缓存错误,所以我将安装命令更改为

npm cache clean --force  && npm install
不幸的是这也不起作用。

我也切换了分支,push到了新的分支。我仍然遇到错误。

您对如何让

vercel
安装我的依赖项有什么建议吗?

node.js configuration vercel
2个回答
1
投票

在 Vercel 中向我的 Next 应用程序添加额外的节点包时,我遇到了同样的问题。我通过以下设置解决了这个问题:

"scripts": {
        "prep": "npm install next react react-dom eslint rimraf -g && yarn add --dev eslint",
        "dev": "next dev",
        "build": "next build",
        "start": "next start",
        "format": "prettier --ignore-path .prettierignore --write \"**/*.{js,jsx,ts,tsx,json,md}\"",
        "lint": "eslint --ignore-path .eslintignore . --ext ts --ext tsx --ext js --ext jsx",
        "lint:fix": "yarn format & next lint --dir src",
        "clean-cache": "rimraf .next",
        "rimraf": "./node_modules/rimraf/bin.js",
        "clean": "yarn prep && rimraf node_modules"
    },

在 Vercel 中,使用

yarn clean && yarn install
作为安装命令。

我还重新部署了应用程序而不保存构建缓存——这可能也值得尝试。


0
投票

对我来说,增加 vercel.json 中的 vercel 版本就可以了。

来自:

“运行时”:“@vercel/[电子邮件受保护]

致:

“运行时”:“@vercel/[电子邮件受保护]

© www.soinside.com 2019 - 2024. All rights reserved.