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
includePathsen la configuración del complemento sassLoader. - Y es similar para las compilaciones
includePathspasasincludePathsal 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'' .