Libsass: Adicionar opção para controlar o comportamento de importação CSS inline

Criado em 28 out. 2015  ·  11Comentários  ·  Fonte: sass/libsass

Adicionamos a capacidade de embutir @import CSS parciais. Isso é significativamente diferente do comportamento do Ruby Sass (que não permite isso de forma alguma) e é compreensível, causando dor .

Precisamos de uma opção de contexto para ativar / desativar este recurso. Deve ser desabilitado por padrão.

Bug - Confirmed Dev - PR Ready Invalid - Not in Sass

Comentários muito úteis

Como @xzyfer disse, tente um importador personalizado, tive um problema em que tínhamos arquivos .scss e arquivos .css no mesmo diretório, e aqui está o importador que fiz para o node-sass

importer: function(url, prev, done) {
    // Use this to import scss files, instead of css ones
    let updatedUrl = url;
    if (!url.endsWith('.scss') && !url.endsWith('.css')) { // Also don't change ones already explicitly set to .css
        updatedUrl += '.scss';
    }
    grunt.verbose.writeln(`Changed ${url} into ${updatedUrl}`);
    done({file: updatedUrl});
}

Testado com node-sass 4.5.2 libsass 3.5.0-beta2

Todos 11 comentários

Acho que a formulação é um pouco enganosa. Nós permitimos apenas importações de css parciais (coisas que terminam com .css serão deixadas como uma importação real no código). Além disso, Ruby Sass não permite isso por padrão, mas algumas ferramentas (bússola AFAIK também) permitem isso por padrão para Ruby Sass. Também não tenho certeza se realmente queremos desativá-lo por padrão, uma vez que esta seria outra alteração potencialmente significativa.

class CSSImporter < Sass::Importers::Filesystem
  def extensions
    super.merge('css' => :scss)
  end
end
Sass::Plugin.options[:filesystem_importer] = CSSImporter

Divulgação completa Ainda acho que esse recurso deve ser removido. Nossa diretriz é fazer o que Ruby Sass faz. Qualquer desvio de sua implementação quebra a portabilidade e é indistinguível de um bug.

Além disso, Ruby Sass não permite isso por padrão, mas algumas ferramentas (bússola AFAIK também) permitem isso por padrão para Ruby Sass

Este não é nosso trabalho. Isso pertence ao reino de ferramentas como wellington e óculos.

Também não tenho certeza se queremos desativá-lo por padrão

Eu acredito veementemente que deveria.

esta seria outra mudança potencialmente importante

O comportamento atual está quebrado no que diz respeito aos usuários do Sass.

Acho que está claro que sou a favor desse recurso e só queria salientar que a falha ocorre principalmente porque implementei a mensagem de erro para importações ambíguas para libsass 3.3.0. Além disso, diferimos apenas por padrão na resolução parcial (incluindo também a extensão css), e eu diria que normalmente você não gera ou tem um css com o mesmo nome ao lado de uma importação _partial_. Não tenho certeza quando irei implementar isso como uma opção no C-API. Colaboradores são bem-vindos;)

Acho que a situação ideal seria que ambos suportassem esses recursos. A próxima melhor coisa seria como @xzyfer diz e pelo menos fazer com que eles sejam consistentes, mesmo que isso signifique que nenhum deles apoie.

Você deve ser capaz de alternar de libsass para ruby ​​sass, em teoria, sem quebrar nada. Ter algo que intencionalmente evite que isso aconteça é uma coisa ruim.

Você deve ser capaz de alternar de libsass para ruby ​​sass em teoria sem que nada pareça

Exatamente.

A próxima melhor coisa seria como @xzyfer diz e pelo menos fazer com que sejam consistentes

Isso é o que faremos.

O Sass 4.0 trará uma maneira de fazer isso corretamente.

Fantástico! Mal posso esperar.

@mgreter Falei com @chriseppstein e @ nex3 sobre este problema. Decidimos que, embora inline de importações CSS quebrem a compatibilidade do Ruby Sass em grande forma, remover esse recurso provavelmente incomodará os usuários. Este tem sido um recurso muito solicitado no Ruby Sass que não foi possível devido às limitações de ser um superconjunto CSS. Como resultado, quase certas pessoas dependem desse comportamento.

Em vez disso, vamos tentar remover isso no 4.0, já que os usuários estão aceitando mais alterações nas principais versões e porque teremos uma maneira oficial de importar CSS em linha.

Recentemente, mudamos para a versão mais recente do Node de uma versão muito mais antiga e tivemos que atualizar uma biblioteca de terceiros que estamos usando para ser compatível com a versão atual do Node. Agora as coisas estão quebradas por toda parte por causa desse bug. Eu entendo que esse problema não foi resolvido na libsass ainda, então estou tentando descobrir recursivamente para quais versões de nossas dependências precisamos voltar para nos livrarmos desse problema.

Então, algumas perguntas (desculpas, se eu perdi essa informação aqui, este tópico é um pouco complicado):

  1. Qual versão do libsass foi introduzida este bug?
  2. Em qual versão a correção está indo - 3.5? 4.0?
  3. Quando essa versão está programada para ser lançada? (Ou já foi lançado, talvez?)

Qual versão do libsass foi introduzida este bug?

Não posso ter certeza. Acho que foi por volta de 3.3.0, que está em [email protected].

Em qual versão a correção está indo - 3.5? 4.0?

Isso será corrigido em 4.0 assim que @use cair. Isso permitirá que as pessoas aceitem explicitamente as importações de CSS.

Quando essa versão está programada para ser lançada?

Impossível dizer, infelizmente. Provavelmente não será este ano.


Como um aparte, se você estiver usando o node-sass, você pode escrever um importador personalizado para importações noop para arquivos .css.

Como @xzyfer disse, tente um importador personalizado, tive um problema em que tínhamos arquivos .scss e arquivos .css no mesmo diretório, e aqui está o importador que fiz para o node-sass

importer: function(url, prev, done) {
    // Use this to import scss files, instead of css ones
    let updatedUrl = url;
    if (!url.endsWith('.scss') && !url.endsWith('.css')) { // Also don't change ones already explicitly set to .css
        updatedUrl += '.scss';
    }
    grunt.verbose.writeln(`Changed ${url} into ${updatedUrl}`);
    done({file: updatedUrl});
}

Testado com node-sass 4.5.2 libsass 3.5.0-beta2

Esta página foi útil?
0 / 5 - 0 avaliações