Laravel Mix 4.0 не может комбинировать глобальный микс css с локальным файлом css

Я столкнулся с проблемой при использовании Laravel Vue. Я поместил свой файл app.scss, а затем скомпилировал его в общую папку с помощью Laravel Mix 4.0. Я не знал, что делает это ошибкой, но это выглядит так странно для меня. Это мой webpack.mix.js

mix.webpackConfig({
  output: {
    filename: '[name].js',
    chunkFilename:'js/[id].[chunkhash].js',
    publicPath: '/',
 },
 resolve: {
    extensions: ['.js', '.vue'],
    alias: {
        '@': __dirname + "/resources"
    }
 }
});

mix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css')
.options({
    processCssUrls: false
})

У меня нет проблем при компиляции файла app.scss, но когда я добавляю @import для импорта другого файла scss в мой файл .vue

<style lang="sass">
    @import '@/sass/public.scss'
</style>

затем npm run dev у меня возникла такая ошибка при запуске программы.

ошибка

Но если я удалю один из них, например, удалю @import или .sass('resources/sass/app.scss', 'public/css', { implementation: require('node-sass') }), затем снова npm run dev и запущу программу. Это работает хорошо. У кого-нибудь когда-нибудь была такая проблема? Я так много раз пытался изменить веб-пакет, но я не уверен, что проблема в веб-пакете.

Суть в том, что я не хочу импортировать свой файл scss в файл main.js, потому что он заменит мой стиль app.scss. Я хочу различать стиль между админкой и страницей пользователя


person Saengdaet    schedule 10.12.2019    source источник
comment
Можешь попробовать mix.options({extractVueStyles: true, processCssUrls: true })?   -  person senty    schedule 10.12.2019
comment
получил тот же результат @senty   -  person Saengdaet    schedule 10.12.2019
comment
Я считаю, что это происходит из-за фрагментации кода и попытки инициализировать scss до его загрузки. Один обходной путь, с которым я столкнулся, заключался в создании пустого файла init.scss и require('../../sass/init.scss'); в вашем app.js в самом верху.   -  person senty    schedule 10.12.2019
comment
если я помещу это в свой файл main.js .. это сработает, но заменит все глобальные css @senty   -  person Saengdaet    schedule 10.12.2019
comment
Понятия не имею, зачем вам это нужно, но беглое гугление показывает, что люди, у которых это работает, ставят тильду в операторе импорта. попробуйте изменить @import '@/sass/public.scss' на @import '~@/sass/public.scss'   -  person Alec Joy    schedule 10.12.2019
comment
Я хочу различать стиль между страницей администратора и страницей пользователя... но у меня есть глобальный CSS с именем app.scss @AlecJoy   -  person Saengdaet    schedule 10.12.2019
comment
@Saengdaet извините, я понятия не имел, почему добавление тильды к URL-адресу импорта было бы необходимо, а не понятия, почему вы пытаетесь это сделать. Моя ошибка, я должен был быть более ясным.   -  person Alec Joy    schedule 10.12.2019
comment
Я пытался поставить тильду, но результат был тот же @AlecJoy   -  person Saengdaet    schedule 10.12.2019
comment
@senty это работа. спасибо, но я до сих пор не понимаю, зачем мне импортировать пустой файл scss. можешь мне объяснить?   -  person Saengdaet    schedule 10.12.2019
comment
@Saengdaet Рад, что это сработало. Я добавил объяснение в качестве ответа и ссылки, где я нашел обходной путь.   -  person senty    schedule 10.12.2019


Ответы (1)


это не работает, потому что файл поставщиков, содержащий загрузчик стилей и загрузчик css, не создавался при использовании асинхронного импорта.

Этот обходной путь сработал для меня:

Создание пустого файла init.scss и require('../../sass/init.scss'); в вашем app.js в самом верху, похоже, решает проблему.

Этот обходной путь предлагает импортировать пустой файл scss в мой app.js, чтобы заставить загрузчик стилей и загрузчик css быть включенным в пакет.


Я узнал об этом в ошибке laravel-mix github, когда я была такая же проблема раньше.

person senty    schedule 10.12.2019
comment
спасибо @senty .. Я думаю, что пока решение можно использовать .. пожалуйста, не стесняйтесь добавлять или изменять ответ, если у вас есть идеальное решение для использования. буду премного благодарен - person Saengdaet; 10.12.2019
comment
@Saengdaet аналогичным образом - если вы обнаружите какое-либо лучшее решение, добавьте ответ (и отблагодарите меня) :) Удачного кодирования - person senty; 10.12.2019