这是 Vercel 错误吗?找不到模块“./model”
Is this a Vercel bug? Cannot find module './model'
我有 2 个文件:
- controller.js
- model.js
我正在制作一个 express.js 应用。
所以,model.js
在 controller.js
中是必需的,但是当我调用 api 时出现此错误
日志是:
但是问题来了,'./model.js'确实存在,但是vercel不认识
并且在本地开发中工作正常,并且是正确需要的
这是model.js
const { nanoid } = require("nanoid");
const getDateStr = () => {
const now = new Date();
return `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`;
}
const Purchase = ({ id_user_buyer, id_user_seller, id_product, quantity }) => (
{
id_user_buyer,
id_user_seller,
id_product,
quantity,
id_purchase: nanoid(),
date: getDateStr(),
}
);
module.exports = {
Purchase
}
这是controller.js
const err = require("../../../utils/error");
const { Purchase } = require("./model")
// others modules and they are well imported, so the problem is './model'
const userController = require("../user");
const productController = require("../product");
const cartController = require("../cart");
const TABLE = 'purchase';
function purchaseController(injectedStore) {
// example code
async function makePurchase(data) {
const purchase = Purchase(data);
await injectedStore.insert(TABLE, purchase);
}
return {
makePurchase,
}
}
module.exports = purchaseController;
如你所见,model.js
在内部导入得很好controller.js
我不知道为什么vercel说ERROR Cannot find module './model'
我再说一遍,在本地开发中工作正常但在维塞尔
一个快速修复方法是将 model.js
的所有代码复制并粘贴到 controller.js
中 我试过了,我部署了他并且成功了。
如果我只是评论我导入 ./model
的那一行,我的所有应用程序也能正常工作,但显然我的应用程序将停止具有该功能,所以第一个解决方案很丑陋但有效,但那些不是最好的解决方案。最好的解决方案是正确导入文件
奇怪的事实 我尝试重命名文件,但也没有用。如果我导入一个新文件,它也不起作用。
注意 我把 nodejs 版本从 12 改成 14,会不会和它有关系?
以防万一我把我的文件夹结构
根目录
api
这是我的vercel.json
{
"version": 2,
"builds": [
{
"src": "/api/index.js",
"use": "@vercel/node"
}
],
"routes": [
{
"src": "/api/auth(.*)",
"dest": "/api/index.js"
},
{
"src": "/api/users(.*)",
"dest": "/api/index.js"
},
{
"src": "/api/products(.*)",
"dest": "/api/index.js"
},
{
"src": "/api/cart(.*)",
"dest": "/api/index.js"
},
{
"src": "/api/purchases(.*)",
"dest": "/api/index.js"
},
{
"src": "/api/sales(.*)",
"dest": "/api/index.js"
}
]
}
我不知道这是vercel的错误还是我的错误。我的应用程序目前可以正常工作,但正在执行我之前命名的技巧,即将 model.js
的所有代码放入 controller.js
感谢阅读整期。
嗯,我不知道为什么,但我认为是一个 vercel 错误,我的问题的解决方案是不使用可选链接。
在 controller.js 中,我有更多代码并且我使用的是 optional chaining,只需更改逻辑即可正常工作。 Vercel 支持可选链接,但使用节点 14.x 并且我在 Vercel 中使用节点 12.x,所以我将其更改为 14.x 并且在其他文件中工作正常,但在 controller.js
因此,如果您正在使用 javascript 新事物,例如可选链接、nullish operator 等。并且您在 vercel 中使用 12.x 版本,则会产生错误。因此,您更改为节点 14.x,它也可能给您带来错误。
因此,您最好从一开始就确保您在 vercel
中拥有 node.js 的 14.x 版本
我有 2 个文件:
- controller.js
- model.js
我正在制作一个 express.js 应用。
所以,model.js
在 controller.js
中是必需的,但是当我调用 api 时出现此错误
日志是:
但是问题来了,'./model.js'确实存在,但是vercel不认识 并且在本地开发中工作正常,并且是正确需要的
这是model.js
const { nanoid } = require("nanoid");
const getDateStr = () => {
const now = new Date();
return `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`;
}
const Purchase = ({ id_user_buyer, id_user_seller, id_product, quantity }) => (
{
id_user_buyer,
id_user_seller,
id_product,
quantity,
id_purchase: nanoid(),
date: getDateStr(),
}
);
module.exports = {
Purchase
}
这是controller.js
const err = require("../../../utils/error");
const { Purchase } = require("./model")
// others modules and they are well imported, so the problem is './model'
const userController = require("../user");
const productController = require("../product");
const cartController = require("../cart");
const TABLE = 'purchase';
function purchaseController(injectedStore) {
// example code
async function makePurchase(data) {
const purchase = Purchase(data);
await injectedStore.insert(TABLE, purchase);
}
return {
makePurchase,
}
}
module.exports = purchaseController;
如你所见,model.js
在内部导入得很好controller.js
我不知道为什么vercel说ERROR Cannot find module './model'
我再说一遍,在本地开发中工作正常但在维塞尔
一个快速修复方法是将 model.js
的所有代码复制并粘贴到 controller.js
中 我试过了,我部署了他并且成功了。
如果我只是评论我导入 ./model
的那一行,我的所有应用程序也能正常工作,但显然我的应用程序将停止具有该功能,所以第一个解决方案很丑陋但有效,但那些不是最好的解决方案。最好的解决方案是正确导入文件
奇怪的事实 我尝试重命名文件,但也没有用。如果我导入一个新文件,它也不起作用。
注意 我把 nodejs 版本从 12 改成 14,会不会和它有关系?
以防万一我把我的文件夹结构根目录
api
这是我的vercel.json
{
"version": 2,
"builds": [
{
"src": "/api/index.js",
"use": "@vercel/node"
}
],
"routes": [
{
"src": "/api/auth(.*)",
"dest": "/api/index.js"
},
{
"src": "/api/users(.*)",
"dest": "/api/index.js"
},
{
"src": "/api/products(.*)",
"dest": "/api/index.js"
},
{
"src": "/api/cart(.*)",
"dest": "/api/index.js"
},
{
"src": "/api/purchases(.*)",
"dest": "/api/index.js"
},
{
"src": "/api/sales(.*)",
"dest": "/api/index.js"
}
]
}
我不知道这是vercel的错误还是我的错误。我的应用程序目前可以正常工作,但正在执行我之前命名的技巧,即将 model.js
的所有代码放入 controller.js
感谢阅读整期。
嗯,我不知道为什么,但我认为是一个 vercel 错误,我的问题的解决方案是不使用可选链接。
在 controller.js 中,我有更多代码并且我使用的是 optional chaining,只需更改逻辑即可正常工作。 Vercel 支持可选链接,但使用节点 14.x 并且我在 Vercel 中使用节点 12.x,所以我将其更改为 14.x 并且在其他文件中工作正常,但在 controller.js
因此,如果您正在使用 javascript 新事物,例如可选链接、nullish operator 等。并且您在 vercel 中使用 12.x 版本,则会产生错误。因此,您更改为节点 14.x,它也可能给您带来错误。
因此,您最好从一开始就确保您在 vercel
中拥有 node.js 的 14.x 版本