Dentro de um aplicativo Angular, faço visuais D3 através de D3 ou Vega simples . Também existe um estilo SCSS.
Eu gostaria de poder me referir às mesmas variáveis globais de estilo do Javascript e do SCSS. Os arquivos JSON fazem o truque muito bem para armazenar configurações carregadas no Typescript por meio de uma import
declaração simples . Mas como alguém faz o mesmo com o SCSS?
node-sass-json-importer
parece um bom candidato, mas adicioná-lo a um aplicativo CLI Angular 9 não é óbvio para mim.
Este post do StackOverflow abordou o assunto há algum tempo, mas envolveu a modificação de recursos sob os node_modules
quais dificilmente é sustentável.
Também existem algumas informações no documento original sobre como é possível ajustar o webpack em um aplicativo não angular . Não sei como relacionar isso a um aplicativo Angular criado por meio da 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(),
},
},
],
],
},
};
Respostas:
Você pode fazer isso sem alterar nenhum
node_modules
arquivo, usando@angular-builders/custom-webpack
para configurar regras personalizadas do Webpack e, como menciona,node-sass-json-importer
para importar arquivos JSON nos arquivos SCSS.Você precisará instalar
node-sass
aimplementation
opção porquenode-sass-json-importer
é compatível comnode-sass
.Instalar pacotes
@angular-builders/custom-webpack
,node-sass-json-importer
enode-sass
:Crie o arquivo de configuração do Webpack (
webpack.config.js
) no diretório raiz do projeto com o seguinte conteúdo:Alterar
builder
para@angular-builders/custom-webpack:[architect-target]
e addcustomWebpackConfig
opção parabuild
,serve
etest
construir alvos dentroangular.json
:Agora você pode incluir qualquer
.json
arquivo dentro de qualquer.scss
arquivo componente :hello-world.component.scss
:hello-world.vars.json
:Eu criei um repositório do Github com todos esses trabalhos que você pode clonar e testar a partir daqui: https://github.com/clytras/angular-json-scss
fonte
Outra opção é usar
raw-loader
, pois está disponível por padrão no angular-cli. Dessa forma, você pode carregar o arquivo scss bruto no componente ts:Você precisa declarar o módulo no
.d.ts
arquivo:Então você pode extrair qualquer informação que desejar.
Portanto, em vez de carregar o JSON no scss, você pode carregar o scss no ts.
fonte
Eu tenho uma abordagem relativamente simples para você:
Separe a
node-sass
etapa dang build
etapa e use os.css
arquivos gerados em vez dossass
arquivos em seu aplicativo angular.Isso tem duas vantagens:
Para a implementação, eu iria em frente da seguinte maneira:
./node_modules/.bin/node-sass --importer node_modules/node-sass-json-importer/dist/cli.js --recursive ./src --output ./src
aos scripts no seupackage.json
exemplo, com o nomebuild-sass
. Você pode ajustar este comando para incluir apenas os arquivos sass para os quais você precisa do modo recursivo (certifique-se de ignorá-los no angular.json, para que não sejam compilados duas vezes).npm run build-sass
para gerar os.css
arquivos no projeto..sass
a.css
npm run build-sass && ng build
comocompile
em seu package.json, que você pode executar sempre que quiser construir o projeto inteiro.Embora essa abordagem seja relativamente simples, ela apresenta algumas desvantagens
ng serve
exigirá que você execute o seunpm run build-sass
para ver as alterações feitas em seus estilos em tempo real.scss
e.css
arquivos para o mesmo componente na/src
pasta na qual o arquivo.css
é gerado. Você precisará garantir (por exemplo, adicionando um sufixo ou comentário) que ninguém edite acidentalmente as geradas.css
e que essas alterações sejam substituídas.Outras abordagens quase sempre envolvem a edição intensa de arquivos existentes ou a criação de seu próprio compilador webpack.
fonte