未捕获的异常:无法找到 Mix 文件

CR7*_*CR7 5 php laravel webpack

我正在尝试在本地系统中运行 Laravel 应用程序。我已经关注了https://gist.github.com/hootlex/da59b91c628a6688ceb1链接。我运行命令php artisan serve命令,当我浏览它时,会产生错误

PHP Fatal error:  Uncaught Exception: Unable to locate Mix file: /css/vendor.css. Please check your webpack.mix.js output paths and try again. in /var/www/html/laravel-app/app/helpers.php:439
Run Code Online (Sandbox Code Playgroud)

在helpers.php的指定行,它有

 if (! isset($manifest[$path])) {
        throw new Exception(
            "Unable to locate Mix file: {$path}. Please check your ".
            'webpack.mix.js output paths and try again.'
        );
    }
Run Code Online (Sandbox Code Playgroud)

公共/混合-manifest.json

{
  "/mix.js": "/mix.js"
}
Run Code Online (Sandbox Code Playgroud)

我无法解决它。请帮忙。谢谢

ika*_*k90 13

这发生在我身上,在花费了相当多的时间和精力之后,我确实设法弄清楚发生了什么以及如何解决它。

发生的情况如下:

  • webpack.mix.js您可以使用您希望分别发布已编译的 JS 和 CSS 文件的目标来更新您的文件。
mix.js('resources/js/app.js', 'public/js').vue();
Run Code Online (Sandbox Code Playgroud)
  • npm run dev当您运行或时,Mix 会编译生成的 CSS 和 JS 文件并将其存储在各自的目标文件夹中npm run watch
laravel-app (Your laravel app root folder)
    \public
        \css
            \app.css
        \js
            \app.js

Run Code Online (Sandbox Code Playgroud)
  • 当您在浏览器中使用 Valet 打开应用程序时,Laravel 会输出以下错误消息:
Unable to locate Mix file: /js/app.js
(or)
Unable to locate Mix file: /css/app.css
Run Code Online (Sandbox Code Playgroud)

不过,在“未捕获的异常”屏幕上值得注意的是,Laravel 默认情况下会尝试在localhost:8080. 暗示 Laravel 正在分别在以下位置查找文件:

localhost:8080\css\app.css
(and)
localhost:8080\js\app.js
Run Code Online (Sandbox Code Playgroud)

因此,如果您的主机名或端口不是localhost:8080,Laravel 将无法找到您的文件。例如,如果您使用 Valet,您的默认 URL 将变为laravel-app.testlaravel-app 是应用程序根文件夹的名称。

但是,有一种方法可以解决这个问题。它直接出现在Laravel 的文档中。

解决方案(TL;DR)

为了使用自定义混合基本 URL,您需要更新config\app.php文件以添加以下配置值来设置混合 URL:

'mix_url' => env('MIX_ASSET_URL', 'localhost'),
Run Code Online (Sandbox Code Playgroud)

mix_url在文件中设置配置选项后app.php,您现在应该能够通过在文件MIX_ASSET_URL中添加密钥.env并将其设置为空白来操作它,以便它\public\js\app.js分别指向项目目录中的 和 \public\css\app.css 。

MIX_ASSET_URL=""
Run Code Online (Sandbox Code Playgroud)

这为我解决了。希望它也适合你。让我知道事情进展如何。干杯!


Adr*_*ian 6

您正在加载的刀片文件显然有mix('/css/vendor.css')调用。您可以注释掉这一行或安装 npm 然后构建您的资产。

您的清单文件没有,/css/vendor.css但是如果您检查刀片文件 ( views),您会发现您正在调用mix('/css/vendor.css'). 因此,如果您找到并注释掉这一行,您的问题将得到解决。

理想情况下,mix()用于加载由 webpack 构建的资产。然后它会为您处理版本控制字符串。文档中详细说明了如何使用混合。我将避免在这里讨论这个问题。

您已经通过运行npm run dev或类似的命令构建了您的资产。然后清单文件不包含这些资产映射。而且您的public目录也没有这些资产。然后可以安全地假设您可以mix从刀片 ( views) 文件中删除这些调用。

如果您的public目录中内置了资产,那么您可以按assets功能加载这些资产。

最后,在将资产加载到您的网站之前,您应该首先了解您的资产。我的想法是,您不知道这些资产的来源,因此您不应该首先加载它们。