Prima di porre questa domanda, voglio sottolineare che ci sono severalsimilarquestionsposted qui su StackOverflow, ma nessuno di questi fornisce una soluzione accurata al problema.Percorsi relativi nella minificazione CSS e Grunt?
Il problema
Ho una configurazione del flusso di lavoro in cui Grunt unisce e minifies più file css in un singolo file per un ambiente di produzione.
Il problema che sto affrontando è che i percorsi di font e immagine si stanno rompendo dopo aver eseguito Grunt, poiché stanno ancora puntando verso i loro percorsi di file relativi esistenti.
Per fare un esempio:
Entro static/homepage/startup/common-files/css/icon-font.css
Ho la seguente regola CSS:
@font-face{font-family:Flat-UI-Icons;src:url(../fonts/Startup-Icons.eot);
Nel mio Gruntfile, ho specificare che io voglio l'uscita del mio file css minified di essere style.min.css
trova a static/css/custom/homepage/
. Il problema è che il percorso del file cambia, con il risultato che tutte le dipendenze di font e immagini non vengono più trovate e restituiscono uno stato 404 nel browser.
Quello che ho fatto per cercare di risolvere questo
Ho capito che ci sono 2 opzioni per risolvere questo problema:
- Copiare tutti i file dipendenti in modo che siano relative al la nuova directory in cui risiede
style.min.css
. Il lato negativo di questo è che potrebbe diventare rapidamente disordinato e rovinare la struttura delle cartelle del progetto! - Modificare manualmente i percorsi manualmente. Ma poi di nuovo, qual è il punto in questo? Grunt è stato progettato per automatizzare le attività!
Qualcuno sa come risolvere questo problema? Ho sprecato quasi 10 ore su questo e sto iniziando a mollare. Le persone hanno affermato di aver risolto il problema allo Github issue page, ma nessuno dice veramente come l'hanno risolto.
EDIT:
Ho guardato attraverso il codice sorgente clean-css library e sembra che è possibile passare una proprietà relativeTo
all'oggetto minifier. Ho avuto un casino con questo, ma sono ancora bloccato. Ti riporterò se riuscirò ad andare oltre con questo.
EDIT:
Ok ho finalmente trovato un po 'di documentazione che spiega che cosa relativeTo
(e altri) le proprietà fanno. Sono ancora bloccato su esattamente ciò che la mia configurazione dovrebbe essere per la mia struttura di file anche se ....
relativeTo - path to resolve relative @import rules and URLs
root - path to resolve absolute @import rules and rebase relative URLs
roundingPrecision - rounding precision; defaults to 2; -1 disables rounding
target - path to a folder or an output file to which rebase all URLs
Ecco il mio file di configurazione Grunt per riferimento:
module.exports = function(grunt) {
grunt.initConfig({
concat: {
homepage: {
src: [
'static/homepage/startup/common-files/css/icon-font.css',
'static/homepage/startup/flat-ui/bootstrap/css/bootstrap.css',
'static/homepage/startup/flat-ui/css/flat-ui.css',
'static/homepage/static/css/style.css'
],
dest: 'static/css/custom/homepage/compiled.css',
}
},
cssmin: {
homepage: {
src: 'static/css/custom/homepage/compiled.css',
dest: 'static/css/custom/homepage/style.min.css'
}
}
});
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks("grunt-css-url-rewrite");
grunt.registerTask('build', ['concat', 'cssmin']);
grunt.registerTask('default', ["build"]);
};
Grazie.
Ho lo stesso problema, ho passato ore a cercare di giocare con "relativo", "destinazione" e "root" senza successo:/ – jitowix
Potrei essere vicino a una soluzione! Vedi il mio commento qui (il mio nome utente è jjmpsp): https://github.com/yeoman/grunt-usemin/issues/225 –
Ok cercherò di dargli un'occhiata domani. (Sento già il dolore ^^) – jitowix