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 import
declaració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_modules
cuales 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_modules
archivo mediante la@angular-builders/custom-webpack
configuración de reglas personalizadas de Webpack y, como menciona,node-sass-json-importer
para importar archivos JSON dentro de archivos SCSS.Tendrá que instalar
node-sass
laimplementation
opción porquenode-sass-json-importer
es compatible connode-sass
.Instalar paquetes
@angular-builders/custom-webpack
,node-sass-json-importer
ynode-sass
:Cree el archivo de configuración de Webpack (
webpack.config.js
) en el directorio raíz del proyecto con los siguientes contenidos:Cambiar
builder
a@angular-builders/custom-webpack:[architect-target]
y añadircustomWebpackConfig
opciones abuild
,serve
y latest
construcción dentro de los objetivosangular.json
:Ahora puede incluir cualquier
.json
archivo dentro de cualquier.scss
archivo 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.ts
archivo: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-sass
paso delng build
paso y use los.css
archivos generados en lugar de lossass
archivos 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 ./src
a las secuencias de comandos en supackage.json
eg 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-sass
para generar los.css
archivos en el proyecto..sass
a.css
npm run build-sass && ng build
comocompile
en su package.json que puede ejecutar cuando quiera construir todo el proyecto.Si bien este enfoque es relativamente simple, tiene algunos inconvenientes.
ng serve
requerirá que ejecute sunpm run build-sass
para ver los cambios que realizó en sus estilos en tiempo real.scss
y.css
archivos para el mismo componente en la/src
carpeta de la cual el.css
se genera. Deberá asegurarse (por ejemplo, agregando un sufijo o comentario) de que nadie edite accidentalmente lo generado.css
y 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