Mix 清单存在时不存在
Posted
技术标签:
【中文标题】Mix 清单存在时不存在【英文标题】:The Mix manifest does not exist when it does exist 【发布时间】:2017-12-22 13:14:32 【问题描述】:对于我的管理面板,我提取了所有资产,包括 manifest-json.js
到 mix.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 清单存在时不存在的主要内容,如果未能解决你的问题,请参考以下文章