No post anterior, mostrei como extrair o css de compoentes VueJS para um arquivo separado. Agora, este post vai mostrar como usar arquivos CSS externos nos Vue Components.
Você com certeza, além de escrever boa parte do CSS do seu site/aplicação, usa algo externo, seja uma biblioteca ou um framework. Vamos ver então, como incluí-los nos nossos projetos.
Extract Text Plugin
Com um projeto VueJS
rodando, (se você não sabe como, dá uma olhada aqui!), teremos também que usar o Extract Text Plugin, que igualmente vai extrair o conteúdo do nosso arquivo externo.
Vamos instalá-lo pelo npm
:1
$ npm install extract-text-webpack-plugin --save-dev
Além de utilizar o vue-loader
e o plugin Extract Text Plugin
em conjunto para extrair o CSS dos componentes e criar um arquivo separado com nossos estilos, vamos usar também um loader module
que vai extrair o CSS de arquivos externos e concatenar com os dos nossos componentes. Como dito, eles podem vir de um arquivo, biblioteca ou framework que eventualmente você use.
A configuração do webpack.config.js
fica assim então:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21var ExtractTextPlugin = require('extract-text-webpack-plugin');
module.exports = {
// ... outras configurações
module: {
loaders: [
// ... outras configurações
{
test: /\.css$/,
loader: ExtractTextPlugin.extract('css-loader')
}
]
},
vue: {
loaders: {
css: ExtractTextPlugin.extract('css')
}
},
plugins: [
new ExtractTextPlugin('styles.css')
]
}
Para que possamos testar isso, vamos criar um arquivo CSS de exemplo, app.css
, e colocá-lo na pasta src/
. Não esquecendo que temos que fazer o import
desse arquivo na nossa aplicação, preferencialmente no App.vue
, dentro da tag
<script>
:
Com isso já estamos gerando um arquivo separado com os estilos dos componentes e com o conteúdo do nosso arquivo externo, na pasta dist/
. Não podemos esquecer de referenciar o arquivo CSS gerado, styles.css
, no index.html
desta maneira: <link rel="stylesheet" href="dist/styles.css">
Usando Pre-Processors
Aqui, como no post anterior, também podemos utilizar pré-processsadores na escrita do nosso CSS.
Estou utilizando o Stylus, mas você pode facilmente encontrar os loaders webpack
de SASS
ou LESS
no npm.
A instalação do stylus
e do stylus-loader
é a seguinte:
1 | $ npm install stylus stylus-loader --save-dev |
Lembrando que temos que adicionar os loaders
do pré-processsador escolhido no webpack.config.js
.
1 | var ExtractTextPlugin = require('extract-text-webpack-plugin'); |
Então, no nosso componente principal, App.vue
, é só dar um @import
, dentro da tag <style>
, do arquivo externo que queremos utilizar:
Lembrando de colocar também o atributo lang
com a valor stylus
na tag <style lang="stylus">
.
Se você quiser usar arquivos específicos em cada um dos seus componentes, é só dar o @import
dentro de cada um deles.
Podemos conferir se o arquivo de saída está gerando corretamente os estilos.
É só roda no terminal o comando de build
:
1 | $ npm run build |
A partir daqui, já estamos habilitados a incluir aquela biblioteca ou framework que usamos no dia a dia :)
Dica - Hot Reload CSS
O CSS não está configurado para responder ao hot reload, que é o sistema que verifica se há modificações na nossa aplicação e as atualiza no browser. Porém, podemos contornar isso facilmente.
Primeiro, criamos um arquivo javascript
, por exemplo stylus.js
, preferencialmente na pasta src/
e nele fazemos o import
do nosso arquivo CSS base:1
import base from './stylus/base.styl'
E no webpack.config.js
colocamos o caminho para o arquivo na propriedade entry
no módulo que o webpack
está exportando:1
2
3
4module.exports = {
entry: ['./src/main.js', './src/stylus.js']
... // outras configurações
}
Para testar é só rodar a aplicação e fazer alguma alteração no CSS:
1 | $ npm run dev |
Conclusão
Vimos como extrair o CSS de arquivos externos, fazendo com que sejam incluídos, junto com os estilos dos nossos componentes Vue
, num arquivo separado. Além disso, tivemos a dica de como adicionar o CSS ao hot reload
da aplicação, que agiliza e muito na hora do desenvolvimento.
Espero que ter ajudado.
Se você tiver algum feedback ou realiza essas tarefas de outro modo, deixa aí nos comentários. :)
Um abraço.
Comments