【问题标题】:The Mix manifest does not exist when it does existMix 清单存在时不存在
【发布时间】:2017-12-22 13:14:32
【问题描述】:

对于我的管理面板,我提取了所有资产,包括 manifest-json.jsmix.setPublicPath(path.normalize('public/backend/'))

所有文件都正确添加到后端文件夹,manifest-json.js 文件如下所示:

{
    // all correct here
    "/js/vendor.js": "/js/vendor.js",
    "/js/app.js": "/js/app.js",
    "/css/app.css": "/css/app.css",
    "/js/manifest.js": "/js/manifest.js"
}

问题是在使用的时候

{{ mix('backend/css/app.css') }}

在我的刀片文件中,它在 public/manifest-json.js 中查找,而不是在 backend/manifest-json.js 中查找。

如何确保使用正确的manifest-json.js 文件?

【问题讨论】:

  • 用资产替换 mix - 示例资产('dist/css/app.css')

标签: php laravel laravel-mix


【解决方案1】:

在将 laravel 项目部署到服务器后,我遇到了同样的异常。它在本地主机上运行得非常好,但经过大量研究,我找到了解决方案。如果您在服务器上遇到此异常,则必须将您的 public 路径绑定到 public_html

只要进入 app/Providers 下,你会找到你的 AppServiceProvider 文件,在 boot() 方法中进行如下绑定.

   $this->app->bind('path.public', function() {
        return base_path().'/../public_html';
    });

【讨论】:

  • 看你的文件夹结构,如果你的laravelApp和public_html在同一个目录下是不行的,你应该根据你的结构来配置。
  • 非常感谢您,如果与其他人相比,这是更清洁的解决方案!我还建议使用某种环境常量(在.env 文件中设置)来指定系统范围内公共目录的路径。
  • 谢谢,这个解决方案解决了我的问题。
  • 谢谢!就我而言,我在开发和生产上有不同的公共路线。所以我在 app->bind 调用之前有这一行: if (App::environment('production')){ /* */ }
  • 这是普遍适用的答案 - 特别是如果您在共享环境中。确保您还遵循了以下说明:stackoverflow.com/questions/44868393/…
【解决方案2】:

我解决了运行这个命令的问题

npm install

然后

npm run production

谢谢。

【讨论】:

  • 或者你可以运行'Npm run dev'而不是生产:)
  • 在这些命令之后,如果我确实通过 ftp 将所有文件夹上传到 myserver,我如何通过 ftp 更新我的服务器?我可以只上传 node_modules 还是需要一些其他文件夹?
【解决方案3】:

我遇到的问题是 mix()-helper 函数默认在 /public/manifest-json.js 中查找 manifest-json 文件,因此如果您将该文件存储在任何其他目录级别,那么它将引发该错误。

假设 manifest-json 文件存储在 public/app/manifest-json.js,那么对于位于 public/app/css/app.css 的文件,您可以使用:

<link rel="stylesheet" href="{{ mix('css/app.css', 'app') }}">

mix()-helper 函数允许使用第二个参数,即清单文件的目录。只需在此处指定它,它将使用正确的清单文件。

【讨论】:

  • 我的文件在共享主机的 public_html 文件夹中,我该如何设置?
  • 谢谢@chris,你的回答终于给了我解决方案
【解决方案4】:

我和提问者有同样的问题:manifest does not exist 解决它我所做的是运行 2 个命令,如下所示:

npm install

然后

npm run dev

现在错误已解决。耶皮。

【讨论】:

  • 我已经安装了node js。使用此命令检查它 node -v npm -v 。这个工作。当 laravel 项目下的命令 npm install 。显示此错误“npm”在 laravel 中不被识别为内部或外部命令
  • @BhavikKalal 你在环境变量中添加了节点 js 的路径变量吗?如果没有添加它然后重新打开命令提示符然后再次检查。
【解决方案5】:

共享主机laravel 5.6 中测试: 在做了标准级别后,如解释here; 需要两个级别: 在app/Providers/AppServiceProvider.php:

$this->app->bind('path.public', function() {
    return realpath(base_path().'/../public_html');
});

public_html 文件中制作.htaccess 文件内容:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
  ErrorDocument 404 /index.php
</IfModule>

来源:here 此文件在某些​​情况下变化最大。

就是这样,解决了我的问题

【讨论】:

    【解决方案6】:

    我在使用 Laravel 包时遇到了同样的问题,它的资产没有发布:

    这为我解决了这个问题:

    php artisan vendor:publish --tag=telescope-assets --force

    来源: https://github.com/laravel/telescope/issues/136 https://github.com/laravel/telescope/issues/250

    【讨论】:

      【解决方案7】:

      尝试以下命令:

      npm install

      npm run dev

      【讨论】:

        【解决方案8】:

        解决方法有3种,我总结一下上面同事说的:

        问题在于,您在视图中使用了 mix()。

        <link rel="stylesheet" href="{{  mix('dist/css/app.css')  }}">
        

        解决方案 1 改成这个。

        <link rel="stylesheet" href="{{  asset('dist/css/app.css')  }}">
        

        解决方案 2 如果您没有 root 访问权限:

        修改App\Providers\AppServiceProvider文件,在boot()方法中添加如下内容。

        $this->app->bind('path.public', function() {
           return base_path().'/../public_html';
        });
        

        解决方案 3

        如果你有 root 访问权限运行:

        npm install & npm run dev
        

        【讨论】:

          【解决方案9】:

          在尝试访问登录和注册页面时,将 laravel 项目部署到(共享)服务器后,我遇到了同样的异常。它在本地机器上运行良好。

          我保持文件和文件夹结构与本地环境相同(我们在本地公共文件夹中的所有文件都在服务器上的 public_html 文件夹中)。

          上面提到的解决方案似乎有效。为了适应我的文件和文件夹结构,我将以下代码添加到 AppServiceProvider 文件和 boot() 方法中。

          $this->app->bind('path.public', function() {
          return realpath(base_path().'/public_html');
          

          });

          现在唯一的问题是登录、注册和仪表板页面的 CSS 混乱。我对 Livewire 完全陌生,我不知道如何解决这个问题。

          【讨论】:

          • 谢谢,解决了我的问题!通过从 app.blade.php 和 guest.blad.php 中的 css 链接中删除 mix 来修复 css
          【解决方案10】:

          在共享托管环境中,删除混合,例如{!!脚本(混合('js/manifest.js'))!!}

          应该改为

          {!!脚本('js/manifest.js')!!}

          这实际上对我有用

          【讨论】:

            【解决方案11】:

            我遇到了同样的错误

            因为当我跑步时

            npm install
            npm run dev
            

            我遇到了一些错误。

            当我更新我的 nodejs 版本时,它已修复。

            【讨论】:

              【解决方案12】:

              我只是在发帖,也许有人会需要它。 对我来说,当我更改刀片文件 css 和 js 指向的路径时,它就起作用了。如下:

              在我的刀片中是这样的:

              <link rel="stylesheet" href="{{ mix('dist/css/app.css') }}">
              

              我将 MIX 更改为 ASSET 为:

              <link rel="stylesheet" href="{{ asset('dist/css/app.css') }}">
              

              JS文件也一样:

              <script src="{{ asset('dist/js/app.js') }}"></script>
              

              【讨论】:

              • 这不是一个真正的解决方案,如果你在 webpack.mix.js 中使用 .version(),你仍然需要在生产中使用 mix 功能
              【解决方案13】:

              如果每个人都一样,在我的情况下,laravel-mix 似乎没有安装,所以在不更改任何文件的情况下,我只是通过运行安装了 laravel-mix:

              npm install laravel-mix@latest --save-dev

              【讨论】:

                【解决方案14】:

                如果您在使用 Laravel Nova 或望远镜时遇到此问题,那么您可能真的缺少 mix-manifest 文件。你应该在 public/vendor/toolname/ 中有那个文件 其中工具名可以是 Nova 或 Telescope。如果您有该文件夹,则应继续将其放入服务器,否则您必须首先发布资产然后将其放入服务器。

                【讨论】:

                  【解决方案15】:

                  尝试将您的公共路由添加到您的 app/Providers/AppServiceProvider.php

                  public function register()
                  {
                      $this->app->bind('path.public',function(){
                  
                      return'/home/hosting-name-folder/public_html'; 
                          
                      });
                  }
                  

                  【讨论】:

                    【解决方案16】:

                    我在共享主机上遇到问题,无法运行 npm 命令。然后我用了最简单的方法。在 /vendor/laravel/.../Foundation/Mix.php 替换

                    i$manifests[$manifestPath] = json_decode(file_get_contents($manifestPath), true);   
                    

                    $manifests[$manifestPath] = json_decode(file_get_contents('https://your-domain.com/mix-manifest.json'), true);
                    

                    不推荐,但可以。您可以将其用作最后一次尝试。

                    【讨论】:

                      【解决方案17】:

                      我更改了 resources/layouts/guest.blade.php 和 resources/layouts/app.blade.php

                          <!-- Styles -->
                          <link rel="stylesheet" href="{{asset('css')}}/app.css">
                      
                          <!-- Scripts -->
                          <script src="{{asset('css')}}js/app.js"></script>
                      

                      和resources/css和resources/js复制我的公用文件夹

                      【讨论】:

                        【解决方案18】:

                        要将您的公共路径绑定到 public_html,请在文件 index.php 中添加以下 3 行:

                        $app->bind('path.public', function() {
                           return __DIR__;
                        });
                        

                        这是我在共享主机

                        上的工作

                        【讨论】:

                          【解决方案19】:

                          Mix 清单不存在。

                          你可以通过更新节点版本来解决这个问题。

                          实际上当你运行命令 npm run dev 时, 显示错误消息“错误:您使用的是不受支持的 Node 版本。请至少更新到 Node v12.14” 很容易你可以通过更新节点 js 版本来修复它

                          谢谢

                          【讨论】:

                            【解决方案20】:

                            我找到了新的解决方案

                            问题是混合清单对吗? 所以只需重定向到混合清单功能。例如,您有:

                            {{ style(mix('css/backend.css')) }}
                            

                            只需将代码更改为

                            {{ style('css/backend.css') }}
                            

                            对我有用

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 2019-07-04
                              • 2018-08-05
                              • 1970-01-01
                              • 2011-05-18
                              • 2020-11-30
                              • 2019-06-20
                              • 1970-01-01
                              相关资源
                              最近更新 更多