Nota: Esta questão é relevante apenas para Grunt 0.3.xe foi deixada para referência. Para obter ajuda com a versão mais recente do Grunt 1.x, consulte meu comentário abaixo desta pergunta.
Atualmente, estou tentando usar Grunt.js para configurar um processo de compilação automático para primeiro concatenar e, em seguida, minimizar arquivos CSS e JavaScript.
Consegui concatenar e minificar com sucesso meus arquivos JavaScript, embora cada vez que executo o grunt, ele pareça apenas anexar ao arquivo em vez de sobrescrevê-los.
Quanto à minimização ou mesmo concatenação de CSS, ainda não consegui fazer isso!
Em termos de módulos CSS grunhido Eu tentei usar consolidate-css
, grunt-css
& cssmin
, mas sem sucesso. Não consegui entender como usá-los!
Minha estrutura de diretório é a seguinte (sendo um aplicativo node.js típico):
- app.js
- grunt.js
- /public/index.html
- / public / css / [vários arquivos css]
- / public / js / [vários arquivos javascript]
Aqui está a aparência do meu arquivo grunt.js atualmente na pasta raiz do meu aplicativo:
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: '<json:package.json>',
concat: {
dist: {
src: 'public/js/*.js',
dest: 'public/js/concat.js'
}
},
min: {
dist: {
src: 'public/js/concat.js',
dest: 'public/js/concat.min.js'
}
},
jshint: {
options: {
curly: true,
eqeqeq: true,
immed: true,
latedef: true,
newcap: true,
noarg: true,
sub: true,
undef: true,
boss: true,
eqnull: true,
node: true
},
globals: {
exports: true,
module: false
}
},
uglify: {}
});
// Default task.
grunt.registerTask('default', 'concat min');
};
Para resumir, preciso de ajuda com duas perguntas:
- Como concatenar e reduzir todos os meus arquivos css na pasta
/public/css/
em um arquivo, por exemplomain.min.css
- Por que grunt.js continua anexando aos arquivos javascript concatenados e minificados
concat.js
econcat.min.js
em/public/js/
vez de substituí-los sempre que o comandogrunt
é executado?
Atualizado em 5 de julho de 2016 - Atualização de Grunt 0.3.x para Grunt 0.4.x ou 1.x
Grunt.js
foi movido para uma nova estrutura em Grunt 0.4.x
(o arquivo agora é chamado Gruntfile.js
). Consulte meu projeto de código aberto Grunt.js Skeleton para obter ajuda na configuração de um processo de construção para Grunt 1.x
.
Mudar de Grunt 0.4.x
para Grunt 1.x
não deve apresentar muitas mudanças importantes .
fonte
concat
na mesmajs
pasta, isso iria pegá-la e anexá-la! Comecei a usar o cssmin e funciona muito bem! Obrigado novamente.concat.min.css
econcat.min.js
. Se eu modificar algo, executar novamente e implantar, as pessoas não obterão a versão mais recente porque o navegador já a armazenou em cache. Existe alguma maneira de nomear aleatoriamente o arquivo e vinculá-los de acordo com as tags<link>
e adequadas<script>
?concat.min-<%= pkg.version %>.js
.dest
assimcssmin: { css:{ src: '<%= concat.css.dest %>', dest: './css/all.min.css'
}} `É o resultado da operaçãoconcat -> css
Quero mencionar aqui uma técnica muito, MUITO interessante que está sendo usada em projetos enormes como jQuery e Modernizr para concatenar coisas.
Ambos os projetos são inteiramente desenvolvidos com módulos requirejs (você pode ver isso em seus repositórios github) e então eles usam o otimizador requirejs como um concatenador muito inteligente. O interessante é que, como você pode ver, nem o jQuery nem o Modernizr precisa do requirejs para funcionar, e isso acontece porque eles apagam o ritual sintático do requirejs para se livrar dos requirejs do seu código. Então, eles acabam com uma biblioteca autônoma que foi desenvolvida com módulos requirejs! Graças a isso, eles são capazes de realizar compilações cutom de suas bibliotecas, entre outras vantagens.
Para todos aqueles interessados em concatenação com o otimizador requirejs, confira esta postagem
Também existe uma pequena ferramenta que abstrai todo o boilerplate do processo: AlbanilJS
fonte
Eu concordo com a resposta acima. Mas aqui está outra forma de compressão CSS.
Você pode concatenar seu CSS usando o compressor YUI :
fonte
Você não precisa adicionar o pacote concat, você pode fazer isso via cssmin desta forma:
E para js, use uglify assim:
fonte
Acho que pode ser mais automático, grunt task usemin cuidar de fazer todos esses jobs para você, só precisa de algumas configurações:
https://stackoverflow.com/a/33481683/1897196
fonte