Dentro de una aplicación angular, hago visuales D3 a través de D3 simple o Vega . También está sucediendo el estilo SCSS.
Me gustaría poder referirme a las mismas variables globales para diseñar desde Javascript y desde SCSS. Los archivos JSON hacen el truco muy bien para almacenar la configuración que cargo en Typecript a través de una simple importdeclaración. Pero, ¿cómo se hace lo mismo desde SCSS?
node-sass-json-importer Parece un buen candidato, pero agregarlo a una aplicación Angular 9 CLI no es obvio para mí.
Esta publicación de StackOverflow analizó el tema hace un tiempo, pero implicó modificar recursos bajo los node_modulescuales es apenas sostenible.
También hay algunas entradas en el documento original sobre cómo se puede modificar el paquete web en una aplicación no angular . No sé cómo relacionar esto con una aplicación angular construida a través de la CLI.
Webpack / sass-loader Blockquote
Webpack v1
import jsonImporter from 'node-sass-json-importer';
// Webpack config
export default {
module: {
loaders: [{
test: /\.scss$/,
loaders: ["style", "css", "sass"]
}],
},
// Apply the JSON importer via sass-loader's options.
sassLoader: {
importer: jsonImporter()
}
};
Webpack v2
import jsonImporter from 'node-sass-json-importer';
// Webpack config
export default {
module: {
rules: [
test: /\.scss$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 1
},
},
{
loader: 'sass-loader',
// Apply the JSON importer via sass-loader's options.
options: {
importer: jsonImporter(),
},
},
],
],
},
};

Respuestas:
Puede hacerlo sin cambiar ningún
node_modulesarchivo mediante la@angular-builders/custom-webpackconfiguración de reglas personalizadas de Webpack y, como menciona,node-sass-json-importerpara importar archivos JSON dentro de archivos SCSS.Tendrá que instalar
node-sasslaimplementationopción porquenode-sass-json-importeres compatible connode-sass.Instalar paquetes
@angular-builders/custom-webpack,node-sass-json-importerynode-sass:Cree el archivo de configuración de Webpack (
webpack.config.js) en el directorio raíz del proyecto con los siguientes contenidos:Cambiar
buildera@angular-builders/custom-webpack:[architect-target]y añadircustomWebpackConfigopciones abuild,servey latestconstrucción dentro de los objetivosangular.json:Ahora puede incluir cualquier
.jsonarchivo dentro de cualquier.scssarchivo componente :hello-world.component.scss:hello-world.vars.json:He creado un repositorio de Github con todos estos trabajos que puedes clonar y probar desde aquí: https://github.com/clytras/angular-json-scss
fuente
Otra opción es usar
raw-loader, está disponible por defecto en angular-cli. De esta manera, puede cargar un archivo scss sin procesar en el componente ts:Tienes que declarar el módulo en el
.d.tsarchivo:Luego puede extraer cualquier información que desee.
Entonces, en lugar de cargar JSON en scss, puede cargar scss en ts.
fuente
Tengo un enfoque relativamente simple para ti:
Separe el
node-sasspaso delng buildpaso y use los.cssarchivos generados en lugar de lossassarchivos en su aplicación angular.Esto tiene dos ventajas:
Para la implementación, seguiría de la siguiente manera:
./node_modules/.bin/node-sass --importer node_modules/node-sass-json-importer/dist/cli.js --recursive ./src --output ./srca las secuencias de comandos en supackage.jsoneg con el nombrebuild-sass. Puede ajustar este comando para incluir solo los archivos sass para los que necesita el modo recursivo (asegúrese de ignorarlos en angular.json, para que no se compilen dos veces).npm run build-sasspara generar los.cssarchivos en el proyecto..sassa.cssnpm run build-sass && ng buildcomocompileen su package.json que puede ejecutar cuando quiera construir todo el proyecto.Si bien este enfoque es relativamente simple, tiene algunos inconvenientes.
ng serverequerirá que ejecute sunpm run build-sasspara ver los cambios que realizó en sus estilos en tiempo real.scssy.cssarchivos para el mismo componente en la/srccarpeta de la cual el.cssse genera. Deberá asegurarse (por ejemplo, agregando un sufijo o comentario) de que nadie edite accidentalmente lo generado.cssy que esos cambios se anulen.Otros enfoques casi siempre implicarían editar en gran medida los existentes o escribir su propio compilador de paquetes web.
fuente