The Mix manifest does not exist when it does exist

Viewed 156605

For my admin panel I extract all the assets including the manifest-json.js to mix.setPublicPath(path.normalize('public/backend/')).

All the files get correctly added to the backend folder, and the manifest-json.js file looks as follows:

{
    // 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"
}

the problem is that when using

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

in my blade-files, it looks in public/manifest-json.js instead of looking for it in backend/manifest-json.js.

How can I make sure the right manifest-json.js file is used?

28 Answers

I had same exception after deployment laravel project to server. It was working perfectly fine on localhost but after lot of research I found a solution. If you encounter this exception on server then you have to bind your public path to public_html

Just go to under the app/Providers, you will find your AppServiceProvider file and inside boot() method make the binding as below.

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

i solved my problem running this command

npm install

and then

npm run production

Thank You.

i have same problem as questioner: manifest does not exist for solving it what i have done is ran 2 commands as following:

npm install

and then

npm run dev

and the error is solved now. yippi.

There are 3 ways to solve it, I summarize what the colleagues said above:

The problem is because, you are using mix() in the views.

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

solution 1 change it to this.

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

solution 2 If you don't have root access:

Modify the App\Providers\AppServiceProvider file and add the following to the boot() method.

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

solution 3

if you have root access run:

npm install & npm run dev

try the following commands:

npm install

npm run dev

I have same exception after deployment laravel project to (shared) server when trying to reach the login and register page. It works fine on local machine.

I kept the file and folder structure the same as on my local environment (all files that our in the public folder locally are in the public_html folder on the server).

The solution mentioned above seems to work. Adapted to my file and folder structure I added the following code to AppServiceProvider file and inside boot() method.

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

});

The only issue now is that the CSS of the login, register and dashboard page is messed up. I'm totally new to Livewire, I have no clue how to fix that.

In a shared hosting environment, Remove the mix e.g. {!! script(mix('js/manifest.js')) !!}

should be changed to

{!! script('js/manifest.js') !!}

This actually works for me

I got the same error

because when I run

npm install
npm run dev

I got some error.

It was fixed when I updated my nodejs version.

I'm just posting maybe someone would need it. For me it's worked when I changed in my blade file css and js pointed path. As bellow:

In my blade was this:

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

I changed the MIX to ASSET as:

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

Also the same on JS file to:

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

If it's the same thing for everybody, in my case laravel-mix seems to be not installed so without changing any files I just installed laravel-mix by running:

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

For bind your public path to public_html, in file index.php add this 3 lines:

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

This is work for me on shared hosting

If you are having this issue with Laravel Nova or telescope then perhaps you are really missing mix-manifest file. You should have that file inside public/vendor/toolname/ Where toolname can be Nova or Telescope. If you have that folder, you should go ahead and put in your server otherwise you will first have to publish the assets & then put it on server.

Try to Add your public route to your app/Providers/AppServiceProvider.php

public function register()
{
    $this->app->bind('path.public',function(){

    return'/home/hosting-name-folder/public_html'; 
        
    });
}
  • Directory Structure like this

    --- public 
       --- app
           --css
              --app.css
           --js
              --app.js
    
  • Import css js in laravel blade file like this

    <link rel="stylesheet" href="{{ asset('app/css/app.css') }}">
    
    <script src="{{ asset('app/js/app.js') }}" type="text/javascript"></script>
    

I change resources/layouts/guest.blade.php and resources/layouts/app.blade.php

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

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

and resources/css and resources/js copy my public folder

The Mix manifest does not exist.

You can solve this problem by updating the node version.

actually when you run command npm run dev, show the error message "Error: You are using an unsupported version of Node. Please update to at least Node v12.14" so easily you can fix it by updating the node js version

Thanks

if your previous setup is correct.but you are looking this type of error it shows The Mix manifest does not exist. then write these command .

npm ci
npm run dev

I resolved my problem by this command : npm install npm run dev

Worked for me on a fresh install of Laravel 9 with Jetstream(using Laradock).

npm run install && npm run development

When running npm run dev the mix was not compiling the files and creating the mix-manifest.json

You should run this commands to install npm dependencies and make your frontend files:

$ npm install
$ npm run dev //or production

Now you're done and you can run your laravel project:

$ php artisan serve

step1 npm install npm run production

step 2 refresh by simply closing and opening the project

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

with

<link rel="stylesheet" href="/css/app.css/">

Here you go!!!!!

I had the issue on a shared host, where I was not able to run npm commands. Then I used the simplest way. In the /vendor/laravel/.../Foundation/Mix.php replace

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

to

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

Not recommended, but it works. You can use it as your last try.

Faced the same problem on both Windows and Ubuntu. Solved it on Ubuntu (and I presume the solution is simillar in Windows). The problem was due to the fact that my installed npm version was too old.

The solution for me was the following. I installed nvm (NodeVersionManager -version 0.39.1) which allowed me to switch to the latest stable version of node (v16.14.0) and then install npm 8.5.0.

Detailed steps: Linux bash terminal commands:

  1. touch ~/.bash_profile ~/.bashrc ~/.zshrc ~/.profile
  2. sudo apt install curl
  3. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
  4. logout and login Ubuntu user
  5. nvm --version
  6. nvm ls-remote
  7. nvm install 16.14.0
  8. node --version

...then inside the laravel project:

  1. npm ci
  2. npm install -g npm@8.5.0
  3. npm audit fix
  4. npm run dev

Try out this one!!

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

It works for me

I found new solution

The problem is mix manifest right? So just redirect to the mix manifest feature. for example, you have:

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

just change your code into

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

it works for me

Related