Laravel 如果 composer.json 上的符号链接设置为 true,Nova 工具将不会更新

Laravel Nova tool wouldn't update if symlink is set to true on composer.json

所以我 运行 遇到了一个奇怪的问题。我用Laravelnova(2)命令生成了一个工具。它位于 ./nova-components/CustomNovaDashboard。为了让部署在 Laravel Vapor 上运行,我必须将以下内容添加到我的父 composer.json.

{
            "type": "path",
            "url": "./nova-components/CustomNovaDashboard",
            "options": {
                "symlink": false
            }
        }

以上允许部署代码,因为 options 中缺少 symlink 否则会引发以下错误:

include(/tmp/vendor/composer/../acme/custom-nova-dashboard/src/ToolServiceProvider.php): failed to open stream: No such file or directory

但现在的问题是,当我在 ./nova-components/CustomNovaDashboard 中 运行 npm run watch 时,开发中的代码永远不会更新,因为不知何故有一份代码副本位于 vendor/acme/custom-nova-dashboard 没有接受更改。

我该如何解决这个问题?

我找到了解决办法,很简单。

在我的 vapor.yml 中,我必须在 composer install 之前添加 COMPOSER_MIRROR_PATH_REPOS=1

build:
      - 'COMPOSER_MIRROR_PATH_REPOS=1 composer install'
      - 'php artisan event:cache'
      - 'npm ci && npm run dev && rm -rf node_modules'

这确保了 nova:tool 生成的符号 link 对 devprod 的作用类似。

只是不要忘记在 composer.json 中设置 "symlink": true。或者保留它最初由 nova:tool 命令生成的内容。