2014-09-09 24 views
5

Ich habe ein Projekt mit Grunt und Bower. Grunt-uglify verkettet/verkleinert Dateien aus dem Bower-Verzeichnis in den Ordner deploy/scripts.js. Ich benutze Grunt-neuere, so wird es nur deploy/scripts.js aktualisieren, wenn neue Dateien hinzugefügt oder geändert werden. Alles funktioniert gut ... außer ...Grunt-neuere mit Grunt-Uglify und Bower

Wenn ich eine neue Bibliothek mit Bower hinzufüge, reflektiert das Dateidatum, wann die Datei in die Bower-Bibliothek hochgeladen wurde (oder wer sie hostet), nicht das Datum, an dem sie erstellt wurde mein Computer. Daher sieht Grunt-newer, dass die neuen Bower-Bibliotheken älter als deploy/scripts.js sind und aktualisiert die Datei nicht.

Eine mühsame Lösung besteht darin, die neue .js-Datei der Bibliothek zu öffnen und erneut zu speichern. Es ändert die Dateidaten und somit erstellt grunt-neuere die Datei deploy/script.js. Die Nützlichkeit von Bower scheint jedoch mit solch einer unangenehmen Lösung irrelevant zu sein.

+0

Nutzt Grunzen-neuere hier die Antwort? Vielleicht grunzen sehen. –

+0

Bitte lesen Sie den obigen Beitrag noch einmal. Grunt-neuere schließt seine Aufgabe korrekt ab; Bower lädt einfach Dateien mit alten erstellten/geänderten Daten. Ich sehe nicht, wie Grunt-Watch für dieses Problem relevant ist. – Jason

Antwort

2

Sie können Bower hooks verwenden, um die Bearbeitungszeit der Dateien zu ändern. Dies ist eine Art von Hack, kann aber erreichen, was Sie suchen.
Sie müssen einen postinstall Hook registrieren und die Liste der aktualisierten Komponenten als Argument übergeben. Wenn das Skript aufgerufen wird, wird% durch eine durch Leerzeichen getrennte Liste von Komponenten ersetzt, die installiert oder deinstalliert werden. die iteriert über die Komponenten und ändert die Änderungszeit der Dateien

{ 
    "scripts": { 
     "postinstall": "hook.sh %" 
    } 
} 

Dann müssen Sie ein Skript:
Die Haken sollten in der .bowerrc Datei registriert werden.
Zum Beispiel eines Shell-Skript:

#!/bin/bash 

for var in "[email protected]" 
do 
    find "./bower_components/$var" -exec touch {} \; 
done 

Hier ist ein weiteres Beispiel für einen node.js Skript für den gleichen Zweck:

var fs = require('fs'); 
var path = require('path') 

var components = process.argv.slice(2) 
components.forEach(function (comp) { 
    var comp_path = path.join(process.cwd(),"bower_components",comp); 
    var files = fs.readdirSync(comp_path); 
    files.forEach(function(file) { 
     fs.utimesSync(path.join(comp_path, file), new Date(), new Date()); 
    }); 
}); 
+0

Interessante Lösung; es ist definitiv ein "Hack" wie du gesagt hast. Ich sehe zwei mögliche Probleme damit. 1) Es hängt von einem Shell-Skript ab. Korrigieren Sie mich, wenn ich falsch liege, aber das wäre keine gute Lösung für Windows-Benutzer, die den Zweck von Bower/NodeJS/Grunt halbnacht. 2) Jedes Mal, wenn ein Bower-Skript aktualisiert wird, werden alle geänderten Scripte aktualisiert. Dies würde Grunt-neuere dazu zwingen, alle Bower-Komponenten zu aktualisieren, selbst wenn nur eine geändert wurde. – Jason

+0

@Jason (1) Sie können eine andere Skriptsprache wie Javascript verwenden (Sie sollten nodejs installiert haben) (2) Bower wird nur die Komponenten übergeben, die installiert wurden, so dass dies kein Problem sein sollte –

+0

Interessant. Haben Sie ein Beispiel dafür, wie nodejs Dateien auf diese Weise manipuliert? – Jason