2014-09-09 30 views
5

Grunt ve Bower kullanarak bir projem var. Grunt-uglify, Bower dizinindeki dosyaları deploy/scripts.js klasörüne birleştirecek/minified edecektir. Grunt-newer kullanıyorum, yeni dosyalar eklendiğinde veya değiştirildiğinde yalnızca deploy/scripts.js'u güncelleyecektir. Her şey harika çalışıyor ... hariç ...Grunt-uglify ve Bower ile daha da iyisi

Bower ile yeni bir kitaplık eklediğimde, dosya tarihi, dosyanın Bower kitaplığına (veya onu her kim barındırıyorsa) yüklendiğini değil, üzerinde oluşturulduğu tarihi yansıtır. benim bilgisayarım. Böylece, Grunt-newer yeni Bower kütüphanelerinin deploy/scripts.js'dan daha eski olduğunu ve dosyayı güncellemediğini görür.

Tek - hantal - yeni kütüphane .js dosyasını açmak ve dosyayı yeniden açmaktır. Dosya tarihlerini değiştirir ve böylece daha yeni olan deploy/script.js dosyasını oluşturur. Bununla birlikte, Bower'ın kullanışlılığı bu kadar garip bir çözüm ile anlaşılmaz görünmektedir.

+0

burada hırıltı-yeni cevap kullanıyor: Burada

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

aynı amaç için bir node.js komut başka bir örnektir? Belki de homurdandı. –

+0

Lütfen yukarıdaki gönderiyi tekrar okuyun. Grunt-newer, görevini doğru şekilde tamamlıyor; Bower sadece eski oluşturulmuş/değiştirilmiş tarihlerle dosya yüklüyor. Grunt-watch'ın bu konuyla nasıl alakalı olduğunu anlamıyorum. – Jason

cevap

2

Dosya değişiklik zamanını değiştirmek için Bower hooks kullanabilirsiniz. Bu bir kesmek gibidir ama aradığınız şeyi başarabilir.
posta yüklemesini posta kutusuna kaydettirmeniz ve güncelleştirilmiş bileşenlerin listesini bağımsız değişken olarak göndermeniz gerekir. Komut dosyası çağrıldığında,% yüklenecek veya kaldırılan bileşenlerin boşlukla ayrılmış bir listesiyle değiştirilir.
kanca .bowerrc dosyada kayıtlı edilmelidir:

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

Sonra dosyaların değişiklik zamanını değiştirir bileşenleri üzerinde dolaşır ve bir komut dosyası gerekir. Örneğin
bir kabuk:

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

İlginç bir çözüm; kesinlikle belirttiğiniz gibi bir "kesmek" dir. Bununla ilgili iki potansiyel sorun görüyorum. 1) Bir kabuk betiğine bağlıdır. Eğer yanılıyorsam düzeltin, ama bu Windows kullanıcıları için Bower/NodeJS/Grunt'ın amacını yarı-yenmek için iyi bir çözüm olmaz. 2) Herzaman bir Bower betiği güncellenir, tüm script değiştirilmiş tarihler güncellenir. Bu, Grunt-newer'ın yalnızca Bower bileşenlerini tek bir değişiklik olsa bile güncellemesini zorlar. – Jason

+0

@Jason (1) Javascript gibi başka bir betik dili kullanabilirsiniz (nodejs'nin kurulu olması gerekir) (2) Bower sadece yüklü olan bileşenleri iletecektir, bu yüzden sorun olmamalıdır. –

+0

İlginç. Dosyaları bu şekilde manipüle eden bir nodejs örneğiniz var mı? – Jason