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

时间:2018-07-05 12:37:48

标签: 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

在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.'
        );
    }

public / mix-manifest.json

{
  "/mix.js": "/mix.js"
}

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

4 个答案:

答案 0 :(得分:1)

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

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

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

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

如果您在public目录中构建了资产,则可以通过assets函数加载这些资产。

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

答案 1 :(得分:1)

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

这是发生了什么:

  • 您将 webpack.mix.js 文件更新为您希望分别发布已编译的 JS 和 CSS 文件的目标。
mix.js('resources/js/app.js', 'public/js').vue();
  • 当您运行 npm run devnpm run watch 时,Mix 会编译并存储由此生成的 CSS 和 JS 文件在它们各自的目标文件夹中。
laravel-app (Your laravel app root folder)
    \public
        \css
            \app.css
        \js
            \app.js

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

在 Uncaught Exception 屏幕上值得注意的是,Laravel 默认会尝试在 localhost:8080 中查找文件。暗示 Laravel 正在分别在以下位置查找文件:

localhost:8080\css\app.css
(and)
localhost:8080\js\app.js

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

但是,有一种方法可以解决这个问题。它直接输出到 Laravel's documentation

解决方案 (TL;DR)

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

'mix_url' => env('MIX_ASSET_URL', 'localhost'),

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

MIX_ASSET_URL=""

这为我解决了它。希望它也适合你。让我知道它是怎么回事。干杯!

答案 2 :(得分:0)

尝试运行npm install,然后根据您使用的内容构建资产npm run devnpm run watch

答案 3 :(得分:0)

package.json文件中查找用于构建脚本和样式的命令,通常默认情况下将具有npm run dev。可能会发生您需要运行的情况:

  • npm rebuild node-sass
  • npm run devnpm run watch