Uwaga: to pytanie dotyczy tylko Grunt 0.3.x i zostało pozostawione w celach informacyjnych. Aby uzyskać pomoc dotyczącą najnowszej wersji Grunt 1.x, zobacz mój komentarz pod tym pytaniem.
Obecnie próbuję użyć Grunt.js do skonfigurowania automatycznego procesu kompilacji, aby najpierw połączyć, a następnie minifikować pliki CSS i JavaScript.
Udało mi się pomyślnie połączyć i zminimalizować moje pliki JavaScript, chociaż za każdym razem, gdy uruchamiam grunt, wydaje się, że po prostu dołącza do pliku, zamiast je nadpisywać.
Jeśli chodzi o minifikację, a nawet konkatenację CSS, na razie nie mogłem tego zrobić!
Grunt pod względem modułów CSS Próbowałem, używając consolidate-css
, grunt-css
& cssmin
, ale bezskutecznie. Nie mogłem się dowiedzieć, jak ich używać!
Moja struktura katalogów jest następująca (jest to typowa aplikacja node.js):
- app.js
- grunt.js
- /public/index.html
- / public / css / [różne pliki css]
- / public / js / [różne pliki javascript]
Oto jak obecnie wygląda mój plik grunt.js w folderze głównym mojej aplikacji:
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');
};
Podsumowując, potrzebuję pomocy z dwoma pytaniami:
/public/css/
Powiedzmy, jak połączyć i zminimalizować wszystkie moje pliki css w folderze w jeden plikmain.min.css
- Dlaczego grunt.js zachować na dołączenie do łączone i minified plików javascript
concat.js
iconcat.min.js
pod/public/js/
zamiast nadpisywania ich za każdym razem, gdy poleceniegrunt
jest uruchamiane?
Zaktualizowano 5 lipca 2016 r. - Aktualizacja z Grunt 0.3.x do Grunt 0.4.x lub 1.x
Grunt.js
przeniósł się do nowej struktury w Grunt 0.4.x
(plik ma teraz nazwę Gruntfile.js
). Proszę zobaczyć mój projekt Open Source Grunt.js Skeleton, aby uzyskać pomoc w konfiguracji procesu kompilacji dla Grunt 1.x
.
Przejście z Grunt 0.4.x
do Grunt 1.x
nie powinno wprowadzać wielu większych zmian .
źródło
concat
w tym samymjs
folderze, zgarnąłby go i dołączył! Zacząłem używać cssmin i działa świetnie! Dzięki jeszcze raz.concat.min.css
iconcat.min.js
. Jeśli coś zmodyfikuję, uruchomię ponownie i wdrożę, ludzie nie otrzymają najnowszej wersji, ponieważ przeglądarka już ją zapisała w pamięci podręcznej. Czy istnieje sposób, aby losowo nazwać plik i połączyć je zgodnie z właściwymi tagami<link>
i<script>
?concat.min-<%= pkg.version %>.js
.dest
ten sposóbcssmin: { css:{ src: '<%= concat.css.dest %>', dest: './css/all.min.css'
}} `To wynik operacjiconcat -> css
Chcę tutaj wspomnieć o bardzo, BARDZO, interesującej technice, która jest używana w dużych projektach, takich jak jQuery i Modernizr, do łączenia rzeczy.
Oba te projekty są w całości opracowane z modułami requirejs (widać to w ich repozytoriach na githubie), a następnie używają optymalizatora requirejs jako bardzo inteligentnego konkatenatora. Ciekawostką jest to, że jak widać, ani jQuery, ani Modernizr nie potrzebuje do działania requirejs, a dzieje się tak, ponieważ wymazują rytuał syntatyczny requirejs, aby pozbyć się requirejs w swoim kodzie. W rezultacie otrzymali samodzielną bibliotekę, która została opracowana z modułami requirejs! Dzięki temu są w stanie między innymi wykonywać skromne kompilacje swoich bibliotek.
Dla wszystkich zainteresowanych konkatenacją z optymalizatorem requirejs, sprawdź ten post
Jest też małe narzędzie, które wyabstrahuje wszystkie schematy tego procesu: AlbanilJS
źródło
Zgadzam się z powyższą odpowiedzią. Ale oto inny sposób kompresji CSS.
Możesz połączyć swoje CSS za pomocą kompresora YUI :
źródło
Nie musisz dodawać pakietu concat, możesz to zrobić za pomocą cssmin w następujący sposób:
A dla js użyj uglify w ten sposób:
źródło
Myślę, że może to być bardziej automatyczne, gruntowne zadanie, w którym zajmiemy się wykonaniem wszystkich tych zadań za Ciebie, potrzebujesz tylko trochę konfiguracji:
https://stackoverflow.com/a/33481683/1897196
źródło