Cómo añadir estilos globales en formato SCSS a una aplicación de Preact
Creé una plantilla preact a partir de la plantilla preact-cli predeterminada.
Añadí:
"sass": "^1.45.1",
"sass-loader": "^10.2.0",
Importé el archivo global scss en index.js y los estilos globales funcionan correctamente.
import "./style/global.scss";
import App from "./components/app";
export default App;
Añadí un mixin y variables scss al archivo global.scss:
@mixin br {
border-radius: 12px;
}
y cuando intento usarlo en un componente como:
.merchant {
margin-bottom: 4px;
@include br;
}
Obtengo un error:
ERROR ./components/header/style.scss (../node_modules/preact-cli/lib/lib/webpack/proxy-loader.js??ref--6-0!./components/header/style.scss)
Module build failed (from ../node_modules/preact-cli/lib/lib/webpack/proxy-loader.js):
@include br;
^
Undefined mixin.
╷
6 │ @include br;
│ ^^^^^^^^^^^
╵
stdin 6:5 root stylesheet
in ./src/components/header/style.scss (line 6, column 5)
@ ./components/header/style.scss 2:12-238 9:17-24 13:7-14 45:20-27 47:4-60:5 49:6-59:7 50:38-45 56:26-33 58:21-28 68:15-22
@ ./components/header/index.js
@ ./components/app.js
@ ./index.js
@ ../node_modules/preact-cli/lib/lib/entry.js
Parece que necesito algo como un “loader” para esto, ¿dónde debo agregarlo?
davy.ai
El mensaje de error sugiere que el mixin
br
no está definido. Para solucionar esto, debes agregar un cargador de SASS a la configuración de tu webpack.En preact-cli, puedes agregar un cargador de SASS instalando
preact-cli-plugin-sass
y agregándolo a tu archivopreact.config.js
.Para agregar el complemento, ejecuta el siguiente comando:
Luego, en tu archivo
preact.config.js
, añade lo siguiente:Con esta configuración, webpack utilizará el cargador de SASS para analizar tus archivos
.scss
y hacer que los mixins y variables estén disponibles en tus componentes.Ten en cuenta que es posible que necesites actualizar tu declaración de importación para incluir la extensión del archivo:
Con estos cambios realizados, tu mixin ahora debería estar disponible para usar en tus componentes.