【发布时间】:2022-04-23 02:28:13
【问题描述】:
在尝试使用 npm 或 yarn 工作区将我现有的 Nextjs 应用程序转换为 monorepo 时,我遇到了 Vercel 部署问题。更改为 monorepo 后,由于包 Not found 问题,我的构建失败。
你可以看到完整的仓库on GitHub in the monorepo-testing branch。
我基本上有两个 npm 包:
-
proposals.es:这个包是实际的 Next.js 应用程序(位于./website文件夹中) -
@common/components:这个包包含简单的 React 组件(位于./common/components文件夹中)
目前的文件夹结构如下所示:
.
├── next-env.d.ts
├── package-lock.json
├── package.json
├── common
│ └── components
│ ├── index.ts
│ └── package.json
└── website
├── next.config.js
├── package.json
├── src
└── tsconfig.json
为了让应用程序正确安装并在本地成功运行,我从根级别运行npm install --workspaces,然后从website 内运行npm run dev 以启动服务器。
我已经完成了以下步骤来尝试让这个新的 monorepo 结构发挥作用:
- 我已将
workspaces添加到my root levelpackage.json: - 我将
next-transpile-modules添加到我的Next config file - 我将
@common/components添加到my website'spackage.json - 我 imported my common component in a page 并渲染它(在运行开发服务器时可以正常工作)
在git push 之后尝试自动部署到 Vercel 时,我最终收到此错误:
Installing dependencies...
Detected `package-lock.json` generated by npm 7...
npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmjs.org/@common%2fcomponents - Not found
npm ERR! 404
npm ERR! 404 '@common/components@*' is not in this registry.
我的 Vercel 设置在这里:
所有设置都是默认的,除了根目录设置为website。我在想问题可能是它没有使用npm install --workspaces 进行安装,但是我尝试将我的Vercel 项目中的安装脚本更改为npm install --workspaces 和cd ../../ && npm install --workspaces,但两者都会出错。
我觉得我可能做错了什么,所以如果有人对如何解决这个问题有任何提示或建议,我将不胜感激。谢谢!
【问题讨论】:
-
嗨!我有同样的问题。但我使用的是实验性的
externalDir标志来编译模块而不是next-transpile-modules。 -
您在使用
externalDir时遇到了同样的问题?不过,我还没有机会重新讨论这个问题,我最终通过使用yarnworkspaces 而不是npmworkspaces 解决了这个问题 -
看起来它还没有达到
externalDir发挥作用的那一刻。尝试了数十种方法来自定义安装和构建命令,但没有任何成功。恐怕我也必须改用 Yarn。