我正在尝试在 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
安装我的依赖项有什么建议吗?
在 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
作为安装命令。
我还重新部署了应用程序而不保存构建缓存——这可能也值得尝试。