Я использую CSS-модули с Nuxt и столкнулся с некоторыми проблемами при попытке импортировать таблицу стилей в js. Если я импортирую свою таблицу стилей непосредственно в ...
`<style module>
@import './index.css';
</style>`
... все работает как положено. В моем конкретном случае мне нужно запустить вычисляемое свойство, чтобы выбрать между двумя различными таблицами стилей, поэтому вместо импорта через <style module>
мне нужно импортировать в <script>
и реализовать стили следующим образом:
<script>
import foo from './index.css'
export default {
computed: {
styles() {
return foo
}
}
}
</script>
При реализации этого в vue все работает отлично, и я возвращаю объект стиля. Однако Nuxt возвращает пустой объект, и ни один из моих стилей не отображается правильно.
Я активирую CSS-модули в моем файле nuxt.config.js следующим образом:
export default {
...
loaders: {
css: {
modules: true
}
}
...
}
Это проблема с Nuxt SSR? Я искал основную причину / решение, но мне не повезло в моем поиске.
Обновление
После принятия совета ivandata и добавления в мой скрипт сборки этот код:
export default {
....
build: {
extend (config, ctx) {
const cssLoader = config.module.rules.find(rule => {
return rule.test.toString() === '/\\.css$/i';
});
delete cssLoader.oneOf[0].resourceQuery;
...
}
}
}
Модули CSS работают, но возникла новая проблема, заключающаяся в том, что теперь проект не понимает стилей vue-компонентов, которые не являются css-модулями. Проведя небольшое исследование, я обнаружил, что resourceQuery
сообщает загрузчику, к какому типу файлов применять параметры загрузчика.
Я попытался покопаться в загрузчике стилей на vue.cli 3 и сравнить различия с Nuxt. Я удалил фрагмент кода ivandata и попытался сопоставить загрузчики vue и nuxt, но проблема все еще сохранялась.
Вот что происходит визуально между включением и выключением кода ivandata:
Disabled
![enter image description here](https://i.stack.imgur.com/lX34x.png)
Включено
![enter image description here](https://i.stack.imgur.com/Wl0cT.png)
А вот фрагмент кода того, что происходит в моем проекте:
<template>
<section :class="style.container">
<h1>hey</h1>
<h2 class="test">hey</h2>
</section>
</template>
<script>
import style from './index.css'
export default {
computed: {
style() {
return style
}
}
}
</script>
<style>
h1 {
font-size: 100px;
}
.test {
font-size: 100px;
}
</style>
Итак, как вы можете видеть, если у меня есть resourceQuery
в загрузчике css, мой импорт javascript из css не работает, но все стили vue-компонентов работали как обычно. После удаления resourceQuery
импортированная таблица стилей js работает, но классы стилей vue-template больше не работают. Я не думаю, что решение заключается в удалении resourceQuery
, и мне любопытно, связано ли это как-то с другим загрузчиком. Я немного покопался в загрузчиках vue.cli 3 и не вижу ничего, что мне отчетливо выделяется.