2012-08-13 10 views
8

ブラウザに送信され、連結され、縮小され、md5キャッシュ破損ファイル名を持つすべてのjavascript、cssおよび画像を持っていたいと思います。私はconnect-assetsなどのパッケージでこれを達成できました。Node.js、Expressとcss、js、画像アセット

しかし、処理前にmd5'edイメージファイル名をCSSに追加できませんでした。

私はLess CSSテンプレートを使用しています。

私を助けることができるパッケージへの指針は素晴らしいでしょう。

例えば

image.pngは、画像455454545.png
CSSリファレンス背景画像に変換されます。URL(image.png) - >限り画像455454545.png

答えて

7

に変更する必要があります私が知っているように、Lessはユーザー定義関数を利用する能力を持っていません。しかし、スタイラスはそうです。ですから、代替のCSSプリプロセッサに乗りたいなら、楽しむことができます! (スタイラスは本当に少ないと非常にsimliarであり、それはそれに切り替えるには多くを取るべきではありません。それは簡単にご使用の環境にプラグインする必要がありますので、プラスconnect-assetsはすでに、スタイラスをサポートしています。)

server.js

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

stylus(fs.readFileSync("styles.styl", 'utf8')) //load stylus file 
    .define("versionedFile", versionedFile) //add our custom function to the stylus env 
    .render(function(err, css){ //render! 
    if (err) { 
     throw err; 
    } 

    fs.writeFileSync("styles.css", css); //write the compiled css to a .css file 
}); 

//our custom function 
function versionedFile(filename) { 
    ... lookup versioned file of filename ... 
    return "versionedFilename.png" 
} 

styles.stylにコンパイルされます

.image-block { 
    background-image: url(versionedFile('unversionedFilename.png')); //this is how we use our custom function 
} 

このため

Styles.cssを

.image-block { 
    background-image: url("versionedFilename.png"); //hooray! 
} 
+0

感謝。どのように "...ファイル名のバージョン管理されたファイルを調べる..."ビットが動作するのでしょうか?申し訳ありませんが、私はノードに新しいので、簡単な方法があるかどうかはわかりません。 – robzolkos

+0

これは本当にファイルのフィンガープリンティング/バージョン管理の仕方によって異なります。たとえば、使用している指紋法がマニフェストファイル(RubyのSprocketsに似ています)を作成している場合は、バージョン管理されたファイル名を参照することができます。私はconnect-assetsが[manifest]を[connect-file-cache](https://github.com/TrevorBurnham/connect-file-cache)を介してメモリに格納していると思います。 – redhotvengeance

+2

あなたのためだけにこれを行うプロジェクトがあるようです。https://github.com/lucasmazza/fingerprint – Martin

関連する問題