2014-09-02 11 views
9

Quando si cerca di compilare il mio file grugnito e costruire nella mia cartella dist per la distribuzione ottengo il seguente errore nella console:Grunt sta trattando cartella con un punto come un file

Running "rev:dist" (rev) task 
dist/public/app/app.js >> 63decaf3.app.js 
dist/public/app/vendor.js >> a09756ab.vendor.js 
dist/public/app/app.css >> d2017fc8.app.css 
Warning: Unable to read "dist/public/bower_components/animate.css" file (Error code: EISDIR). 

La ragione di questo è che Ho installato un componente Bower chiamato animate.css. Questa libreria è ovviamente installata nella mia cartella bower_components, ma la stringa corrispondente che ho nel mio file Grunt cerca solo i file con un'estensione di .js, .css, eccetera. Ecco la mia stringa corrispondente:

// Renames files for browser caching purposes 
rev: { 
    dist: { 
    files: { 
     src: [ 
     '<%= yeoman.dist %>/public/{,*/}*.js', 
     '<%= yeoman.dist %>/public/{,*/}*.css', // Offending line 
     '<%= yeoman.dist %>/public/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', 
     '<%= yeoman.dist %>/public/assets/fonts/*' 
     ] 
    } 
    } 
} 

Ed ecco la struttura di directory:

bower_components 
    -> ... 
    -> angular-ui-router 
    -> animate.css // Folder with the error 
    ---> animate.css // File that it should be recognizing 
    ---> animate.min.css // File that it should be recognizing 
    -> es5-shim 
    -> ... 

In questo caso, come faccio a dire Grunt che si tratta di una directory che contiene i file piuttosto che un file stesso?

+2

Perché stai usando '{, * /}'? Se sto leggendo i documenti a destra, questo corrisponde a una stringa vuota oa un nome di directory (inclusa la barra finale). Mi sembra che dovresti usare '**/*. Css'. (A proposito, glob e regex non sono la stessa cosa.) –

+1

Hai ragione circa la differenza tra glob e regex, ho modificato i tag del mio post di conseguenza. La ragione per cui uso '{, * /}' è perché questo rinominerà solo i file concatenati finali (dato che tutto è combinato in un grande '.js' e un grande file' .css'. Fare '**/*. css' rinomina tutti i file css, non solo i pochi file che ho bisogno. Ha senso o dovrei ri-spiegare? – cereallarceny

+0

Mi sono imbattuto in questo problema prima - il colpevole era che usavo una versione di grunt-devcode che non funzionava correttamente gestisci i punti nelle directory - il punto in cui stai ricevendo l'errore è dopo che il tuo html è stato "semplificato" - quindi forse un altro pacchetto npm non ha a che fare con i punti correttamente.Non sono sicuro se stai usando grunt-devcode, ma inizierei a dare un'occhiata ai pacchetti che usi –

risposta

7

Ho un approccio leggermente diverso.

bower install animate-css --save

che catturerà animate.css ma salvare in:

bower_components/animate-css

Utilizzando questo metodo non devi giocare con Gruntfile.js che personalmente considero sgradevole per modificare e anche guardare;)

+0

Questa sillabazione del nome del pacchetto è specifica per la libreria animate.css o è qualcosa che bower fa quando gli utenti inviano pacchetti con punti nel nome? – cereallarceny

+0

Non c'è nulla nel bower.json del progetto animate.css che indica il nome alternativo. Sto indovinando il metodo di fallback di Bower. Se fossi in te, farei un rapido esperimento installando un altro pacchetto: immagino che tu sia ancora seriamente interessato a farlo:> –

+0

Questo non funziona con i pacchetti bower come fullpage.js. Genera un errore "ENOTFOUND Package fullpage-js non trovato" – nikjohn

0

Dovresti essere in grado di utilizzare un custom filter function con il metodo fs.Stats. Inoltre, v'è la possibilità ext (indica dove si trova il periodo che delimita l'estensione.)

ext: String

src: [ 
    '<%= yeoman.dist %>/public/{,*/}*.js', 
    '<%= yeoman.dist %>/public/{,*/}*.css', // Offending line 
    '<%= yeoman.dist %>/public/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', 
    '<%= yeoman.dist %>/public/assets/fonts/*' 
    ], 
    filter: 'isDirectory', 

Potrebbe essere necessario utilizzare isFile a seconda se solo si desidera far corrispondere reale file invece.

+1

Non credo che funzioni. Si genera un errore: /Applications/MAMP/htdocs/octovis/barnacle/Gruntfile.js:218 filtro: 'isDirectory', ^ Caricamento compiti "Gruntfile.js" ... ERRORE >> SyntaxError: token imprevisto : Avviso: attività "predefinita" non trovata. Usato - forza, continua. – cereallarceny

+0

A proposito, cambiandolo per filtrare: "isFile" genera lo stesso errore. – cereallarceny

+0

Provalo come ti ho mostrato ora. Penso che tu voglia usare 'isFile' però. –

6

Escludere la cartella animate.css, quindi includere tutto al suo interno. Non sono sicuro delle esatte opzioni globali see here, per i dettagli. Qualcosa del genere:

rev: { 
    dist: { 
    files: { 
     src: [ 
     '<%= yeoman.dist %>/public/{,*/}*.js', 
     '<%= yeoman.dist %>/public/{,*/}*.css', 
     '!<%= yeoman.dist %>/public/bower_components/animate.css', 
     '<%= yeoman.dist %>/public/bower_components/animate.css/animate.css', 
     '<%= yeoman.dist %>/public/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', 
     '<%= yeoman.dist %>/public/assets/fonts/*' 
     ] 
    } 
    } 
} 
+0

Mi piacerebbe vedere qualcuno trasformarlo in un glob più generale ... Potrei vedere sorgere problemi se tu avessi una cartella chiamata 'awesomeLib.js' che è uno schema di denominazione comune dei progetti. – cereallarceny

+0

@cereallarceny Penso che nessuno dovrebbe nominare le proprie cartelle in questo modo, è pericoloso, non è possibile risolvere il problema per ogni configurazione che hai. – user3995789

+0

Sono d'accordo, ma non dipende da me cosa fanno gli altri. – cereallarceny

0

Esempio di utilizzo di isFile, ha funzionato per me un fascino.

// Renames files for browser caching purposes 
filerev: { 
    dist: { 
    src: [ 
     '<%= yeoman.dist %>/**/*.js', 
     '!<%= yeoman.dist %>/local.js', 
     '!<%= yeoman.dist %>/web.js', 
     '<%= yeoman.dist %>/styles/**/*.css', 
     '<%= yeoman.dist %>/images/**/*.{png,jpg,jpeg,gif,webp,svg}', 
     '<%= yeoman.dist %>/styles/fonts/*' 
    ], 
    filter: 'isFile' 
    } 
}, 
Problemi correlati