laravel-mix / laravel-mix

The power of webpack, distilled for the rest of us.
MIT License
5.26k stars 806 forks source link

Defining multiple SASS files do not result in multiple CSS files and output param gets ignored #3360

Open Fjonan opened 1 year ago

Fjonan commented 1 year ago

Description:

Defining multiple SASS files do not result in multiple CSS files (as described in the documentation). All given SASS files are combined into one and they use the path and filename of the first JS file given. If no JS file has been used, a fallback name mix.css is used in the default folder.

Looks to me like the .sass() output parameter is never used and instead the first value from the .js() output parameter instead.

Steps To Reproduce:

// webpack.mix.js
let mix = require('laravel-mix');

mix.setPublicPath('public');

mix .sass('resources/assets/sass/default.scss', 'css')
    .sass('resources/assets/sass/themes/flt.scss', 'css')
    .sass('resources/assets/sass/codecheck.scss', 'css')

    .js('resources/assets/js/app.js', 'js')
    .js('resources/assets/js/changepassword.js', 'js')

    .vue()

    .options(
        {
            processCssUrls: false
        }
    )
;

And this is the output image

when I comment out or change the order of the JS files, this happens:

// webpack.mix.js
let mix = require('laravel-mix');

mix.setPublicPath('public');

mix .sass('resources/assets/sass/default.scss', 'css')
    .sass('resources/assets/sass/themes/flt.scss', 'css')
    .sass('resources/assets/sass/codecheck.scss', 'css')

//    .js('resources/assets/js/app.js', 'js')
    .js('resources/assets/js/changepassword.js', 'js')

    .vue()

    .options(
        {
            processCssUrls: false
        }
    )
;

Output image

Third try, I remove the remaining JS file like this:

// webpack.mix.js
let mix = require('laravel-mix');

mix.setPublicPath('public');

mix .sass('resources/assets/sass/default.scss', 'css')
    .sass('resources/assets/sass/themes/flt.scss', 'css')
    .sass('resources/assets/sass/codecheck.scss', 'css')

    //.js('resources/assets/js/app.js', 'js')
    //.js('resources/assets/js/changepassword.js', 'js')

    .vue()

    .options(
        {
            processCssUrls: false
        }
    )
;

Output: image

Fjonan commented 1 year ago

No ideas on why that is?