混合清单不存在,实际上是存在的。

71

为了我的管理员面板,我提取所有资产,包括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') }}

在我的 blade 文件中,它查找的是 public/manifest-json.js 而不是 backend/manifest-json.js。如何确保使用正确的 manifest-json.js 文件?

使用 asset 替换 mix - 示例 asset('dist/css/app.css')。 - Omar bakhsh
32个回答

79

在将 Laravel 项目部署到服务器后,我遇到了相同的异常。在本地主机上它运行得非常完美,但经过大量研究,我找到了解决方案。如果你在服务器上遇到这个异常,那么你需要将public路径绑定到public_html

只需前往 app/Providers 下,你会找到你的AppServiceProvider 文件,在 boot() 方法内进行如下绑定即可。

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

2
这取决于您的文件夹结构,如果您的laravelApp和public_html在同一个目录下,它将无法工作,您应该根据自己的结构进行配置。 - Gvep
5
非常感谢您,与其他方案相比,这个解决方案更加简洁!我还建议使用一种环境常量(在.env文件中设置)来全局指定公共目录的路径。 - vintprox
1
谢谢!在我的情况下,我在开发和生产环境中有不同的公共路由。因此,在app->bind调用之前,我有这行代码:if (App::environment('production')){ /* */ } - gtamborero
1
这是普遍适用的答案,特别是如果您在共享环境中。确保您也遵循了这些说明:https://dev59.com/4aPia4cB1Zd3GeqPsxPH#46409411 - andromeda
这是在我的cpanel网络托管中有效的答案,谢谢。 - saber tabatabaee yazdi
显示剩余2条评论

67

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

npm install

然后

npm run production

谢谢。


11
你可以选择运行 'Npm run dev' 而不是生产环境 :) - mpalencia
如果我通过FTP上传了所有文件夹到我的服务器,那么如何通过FTP更新我的服务器?我只需要上传node_modules文件夹还是需要其他文件夹? - saber tabatabaee yazdi

30

我遇到的问题是mix()函数默认在/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()辅助函数允许传递第二个参数,即清单文件的目录。只需在那里指定它,它将使用正确的清单文件。


8
我的文件在共享主机上的public_html文件夹中,我该如何设置? - Mahdi Younesi
谢谢@chris,最终你的答案给了我解决方案。 - Faridul Khan

18

我和提问者有同样的问题:manifest does not exist。为了解决这个问题,我运行了以下两个命令:

npm install

然后

npm run dev

现在问题已经解决。太棒了!


我已经安装了Node.js。使用以下命令进行检查:node -v npm -v。这有效。但是,在Laravel项目中运行npm install命令时,会显示错误“npm”未被识别为内部或外部命令。 - Bhavik Kalal
@BhavikKalal,你在环境变量中添加了Node.js的路径变量吗?如果没有,请添加后重新打开命令提示符,然后再次检查。 - Haritsinh Gohil

12

3
对我也起作用了,对于Nova,使用 php artisan nova:publish - maesk

11

在测试了共享主机Laravel 5.6 之后: 在执行标准级别,例如这里所解释的之后; 需要两个级别: 在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>

来源:这里

这个文件在某些情况下需要进行更改。

就这样,问题解决了。


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

5
请尝试以下命令:
npm安装
npm运行开发

3
您需要运行以下命令来安装npm依赖项并生成前端文件:
$ npm install
$ npm run dev //or production

现在您已经完成了,可以运行您的laravel项目:
$ php artisan serve

2

我在cpanel上托管时遇到了同样的问题

只需更改从

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

变成

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

这解决了我的问题。 如果这个答案对你有帮助,请别忘了点赞。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接