angular - change - SCSS Importación relativa a la raíz
page title angular 4 (3)
La solución para angular-cli es agregar stylePreprocessorOptions
a .angular-cli.json
.
{
"apps": [{
...
"stylePreprocessorOptions": {
"includePaths": [
"./app/global-styles"
]
},
...
}]
}
si usa la representación del lado del servidor, recuerde agregar esto tanto para ssr
como para la construcción principal de la aplicación; de lo contrario, obtendrá NodeInvocationException: Prerendering failed because of error: Error: Cannot find module ''C:/Users/.../ClientApp/dist-server/main.bundle.js''
{
"apps": [{
...
"outDir": "dist",
"stylePreprocessorOptions": {
"includePaths": [
"./app/global-styles"
]
},
...
},
{
...
"name": "ssr",
"outDir": "dist-server",
"stylePreprocessorOptions": {
"includePaths": [
"./app/global-styles"
]
},
...
}
]
}
Estoy en el proceso de refactorizar una aplicación Angular y al mover los componentes a nuevas ubicaciones de directorio, me estoy dando cuenta de que el manejo de las rutas de @import
en los archivos SCSS de los componentes se está volviendo un poco tedioso.
Por ejemplo, digamos que tengo el archivo src/_mixins.scss
en la raíz de mi aplicación y el componente src/app/my-widget/my-widget.component.scss
importa el SCSS así que @import ''../../mixins'';
. Todo bien y bien.
Pero luego decido que my-widget.component
es realmente un "componente compartido" en otro componente my-thingy.component
, así que creo una carpeta shared
en src/app/my-thingy
y muevo todo lo que estaba en src/app/my-widget
en él.
Espero que aún estés conmigo ... Ahora tengo src/app/my-thingy/shared/my-widget
y modifico mi archivo SCSS para importar @import ''../../../../mixins''
.
Nota: Este es un ejemplo simplificado. Algunos de los caminos se vuelven relativamente profundos (sin juego de palabras ... ¿ o no? ) Y todos estos .
y /
son un poco mucho.
TL; DR
Sería muy útil si desde el principio pudiera haber importado _mixins.scss
relación con la raíz en todos los archivos SCSS de mis componentes para no tener que seguir jugando con las rutas @import
al refactorizar. (Por ejemplo, algo @import ''~/mixins''
). Existe algo como esto?
Lo que he intentado (y, lamentablemente, ha fallado):
-
@import ''~/mixins''; /** I had real hope for this one **/
-
@import ''mixins''; /** Just being overly optimistic here **/
-
@import ''~//mixins''; /** Now I''m just making stuff up **/
Entiendo que ya voy a tener que modificar los archivos de mi mod para que apunten a la nueva ruta del componente con todas estas "cosas en movimiento", pero ... oye, una cosa menos, ¿verdad?
También puede usar {}
para hacer referencia al nivel superior de la ruta del proyecto, por lo tanto, algo así funcionará.
@import "{}/node_modules/module-name/stylesheet";
- Si está utilizando Angular CLI, eche un vistazo a los estilos globales , específicamente a la opción
"stylePreprocessorOptions"
. - Para el paquete web, puede configurar
includePaths
en la configuración del complemento sassLoader. - Y es similar para las compilaciones
includePaths
pasasincludePaths
al complemento sass.
Cualquiera que sea su herramienta de compilación, sass tratará esas rutas como root, por lo que puede importarlas directamente, así que con:
includePaths: ["anywhere/on/my/disk"]
puede simplemente @import ''styles''
lugar de @import ''anywhere/on/my/disk/styles''
.