Mix 清单存在时不存在

Posted

技术标签:

【中文标题】Mix 清单存在时不存在【英文标题】:The Mix manifest does not exist when it does exist 【发布时间】: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') 【参考方案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')) /* */ 这是普遍适用的答案 - 特别是如果您在共享环境中。确保您还遵循了以下说明:***.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') 

对我有用

【讨论】:

以上是关于Mix 清单存在时不存在的主要内容,如果未能解决你的问题,请参考以下文章

属性存在于调试器中,但在编译时不存在

为啥用户单击通知时不存在 userInfo?

合约中不存在函数时不调用后备函数

解析类型时不存在 BigDecimal

Discord.js 变量在定义时不存在?

导入 Access 时不存在文本文件规范