使用本地包/依赖项将Gatsby部署到Vercel

使用本地包/依赖项将Gatsby部署到Vercel,gatsby,vercel,Gatsby,Vercel,我有一个盖茨比网站,使用本地软件包,不可能/不允许将其公开 该站点在本地构建良好,但当我尝试在Vercel上部署它时,它找不到包。我发现了一些相关的问题,但到目前为止,没有一个解决方案对我有效 包位于Gatsby的静态文件夹中,该文件夹位于根目录中,并在生成时复制到公用文件夹中。在my package.json中,我有以下内容: "devDependencies": { "fslightbox-react": "file:./public

我有一个盖茨比网站,使用本地软件包,不可能/不允许将其公开

该站点在本地构建良好,但当我尝试在Vercel上部署它时,它找不到包。我发现了一些相关的问题,但到目前为止,没有一个解决方案对我有效

包位于Gatsby的静态文件夹中,该文件夹位于根目录中,并在生成时复制到公用文件夹中。在my package.json中,我有以下内容:

"devDependencies": {
    "fslightbox-react": "file:./public/fslightbox-react-pro-1.4.2.tgz",
  },
 "scripts": {
    "install-plugin": "cd public && yarn add fslightbox-react-pro-1.4.2.tgz",
    "build": "yarn install-plugin && gatsby build",
  },
然后在Vercel设置中,我用
warn build

我尝试了install plugin命令的多种变体,并尝试更改路径,但在部署时不断出现以下错误:

错误“/public/fslightbox-react-pro-1.4.2.tgz”:Tarball不在网络中,无法在缓存中定位([“/vercel/path0/public/fslightbox-react-pro-1.4.2.tgz”、“/vercel/cache/thread/v6/npm-fslightbox-react-1.4.2-aa6c77ceb2feb8487853163cb9a3a3a3d91ca85f/node_模块/fslightbox-react/.Tarball.tgz”)

我以前使用的是npm,虽然错误消息略有不同,但它基本上也无法在/vercel/path0/public/中找到包

我几乎可以肯定这是一些基本的东西,我只是忽略了一些显而易见的东西,但在这一点上,任何帮助或指点都将不胜感激

解决方案,因此没有人需要仔细阅读所有评论: 在vercel中不需要命令覆盖,只需修复安装插件命令,如下所示:

"install-plugin": "cd static && yarn add file:static/fslightbox-react-pro-1.4.2.tgz",
"build": "yarn install-plugin && gatsby build",

软件包应位于根目录下的静态文件夹中。您是否尝试更改Vercel仪表板中的build命令

根据他们的文档,您可以:

在这里,您可以在build命令或install命令中添加如下内容:

INSTALL COMMAND: yarn install && yarn install-plugin
BUILD COMMAND: yarn install-plugin && gatsby build
顺便说一下,我刚刚注意到
devdependency
的位置是:

"fslightbox-react": "file:./public/fslightbox-react-pro-1.4.2.tgz",
/public
文件夹仅在您已经构建项目时存在,这意味着在新安装(Vercel所做的)中,它将永远不存在,因为它甚至还没有创建。您正在“黑客”这种行为,因为您已经在本地构建了项目,并且文件夹已经存在

如果您在本地运行
gatsby clean
(删除
.cache
/public
文件夹),您应该能够在本地重现问题。尝试使用类似以下内容将依赖项位置更改为静态文件夹:

"fslightbox-react": "file:./static/fslightbox-react-pro-1.4.2.tgz",
或者直接使用未压缩的文件

或者,您可以将依赖项上载到自有的私有存储库,并使用自定义版本,而无需直接使用该文件:

"devDependencies" : {
  "fslightbox-react" : "git+https://[GITHUB_TOKEN]:x-oauth-basic@github.com/[USER]/[YOUR_REPO_URL].git",
}
资料来源:

总的来说,最后一种方法是最好的,而且攻击性较小,因为如果使用静态文件夹,则会将该脚本传输到公用文件夹,从而增加不打算这样做的文件中的包大小


解决方案
感谢您的建议,我已经尝试过了,但不幸的是仍然出现了相同的错误。您是否检查过环境(本地和Vercel)之间的纱线版本?刚刚选中,两者在1.22.10相同,
public
文件夹仅在项目已生成时存在(实际上是Vercel上载到服务器的文件夹),因此您的命令将始终失败(抱歉,以前没有注意到)。您正在本地进行“黑客攻击”,因为您已经构建了您的项目。如果您运行一个
gatsby clean
,您应该能够在本地重现问题。要绕过它,我建议使用另一个文件夹而不是公用文件夹,因为如果命令失败,它将不会生成。尝试直接使用未压缩的依赖项或静态文件夹。最后,删除build和install命令的这两个覆盖就成功了。非常感谢你的帮助,我真的很感激!将在原始问题中总结解决方案,以供将来参考。再次感谢!:)
"install-plugin": "cd static && yarn add file:static/fslightbox-react-pro-1.4.2.tgz",
"build": "yarn install-plugin && gatsby build",