hashedassets NBSPは&その内容に基づいて、ファイル名にファイルをコピーし、コマンドラインツールである。また、何に改名されたものの地図を書き込むので、あなたのファイルを見つけることができます。
これの主な目的は、遠い未来はあなたのコンポーネントにExpiresヘッダを追加できることです。ユーザーが唯一の変更していないファイルをダウンロードする必要があるため、ハッシュベースのファイル名を使用すると、あなたの$ VCSリビジョン番号を使用するよりもずっと良いです。
いくつかのソースファイルの作成
まず、ハッシュ化するファイルを作成します。
>>>システム(「MKDIR入力/」)
>>>システム(「MKDIR入力/サブディレクトリ/ ")
>>>システム(「MKDIRマップ/ ")
>>>(「入力/ foo.txtの「「W」)開いているファイルなどを持ちます:
... file.write( "foo"という)
>>>ファイルとして(「入力/サブディレクトリ/ bar.txt "、" W ")、オープンで:
... file.write(「バー」)
>>>システム(「触れ-t200504072213.12入力/ foo.txtの ')
簡単な使用方法
>>>システム(「hashedassetsマップ/ map.txt入力/ *。txtの入力/ * / *。TXT出力/」)
MKDIR「出力」
CP「入力/ foo.txtの ''出力/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」
CP「入力/サブディレクトリ/ bar.txt ''出力/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt '
>>>(「マップ/ map.txt」)オープン印刷してください。読み()
サブディレクトリ/ bar.txt:Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt
foo.txtの:C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt
>>>システム(「LS出力/」)
C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt
Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt
>>>システム(「LSマップ/」)
map.txt
ログ出力のレベル
私たちは静かにコマンドを伝える場合は、それが何をしているか印刷されません。
>>>システム(「hashedassets -qマップ/ map2.txt入力/ *。txtの入力/ * / *。TXT出力/」)
我々は、より詳細にできるコマンドを伝える場合には、より多くの情報をログに記録します。
>>>システム(「hashedassets -vvvマップ/ map3.txt入力/ *。txtの入力/ * / *。TXT出力/」)
デバッグレベルを10に設定します
CP「入力/ foo.txtの ''出力/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」
CP「入力/サブディレクトリ/ bar.txt ''出力/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt '
修正時間も保持されます:
>>> old_stat =はos.stat(「入力/ foo.txtの」)
>>> new_stat =はos.stat(「出力/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」)
>>> [(GETATTR(old_stat、小道具)== GETATTR(new_stat、小道具))
...( 'st_mtimeの両'、 'はst_atime'、 'st_inoの'、)で小道具のための]
[真、真、偽]
我々は、簡単に複数のフォーマットでこれを行うことができます:
JavaScriptの
>>>システム(「hashedassets -n my_callbackマップ/ map.js入力/ *。txtの入力/ * / *。TXT出力/」)
CP「入力/ foo.txtの ''出力/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」
CP「入力/サブディレクトリ/ bar.txt ''出力/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt '
>>>(「マップ/ map.js」)オープンの印刷。)(読み
VARのmy_callback = {
  "foo.txtの": "C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」、
  "サブディレクトリ/ bar.txt": "Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt」
};
JSON
>>>システム(「hashedassets -n my_callbackマップ/ map.json入力/ *。txtの入力/ * / *。TXT出力/」)
CP「入力/ foo.txtの ''出力/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」
CP「入力/サブディレクトリ/ bar.txt ''出力/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt '
>>>(「マップ/ map.json」)オープン印刷してください。読み()
{
  "foo.txtの": "C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」、
  "サブディレクトリ/ bar.txt": "Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt」
}
JSONP
>>>システム(「hashedassets -n my_callbackマップ/ map.jsonp入力/ *。txtの入力/ * / *。TXT出力/」)
CP「入力/ foo.txtの ''出力/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」
CP「入力/サブディレクトリ/ bar.txt ''出力/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt '
>>>(「マップ/ map.jsonp」)オープン印刷してください。読み()
my_callback({
  "foo.txtの": "C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」、
  "サブディレクトリ/ bar.txt": "Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt」
});
サス
サスは、CSSの上にメタ言語です。
>>>システム(「hashedassets -n my_callbackマップ/ map.scss入力/ *。txtの入力/ * / *。TXT出力/」)
CP「入力/ foo.txtの ''出力/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」
CP「入力/サブディレクトリ/ bar.txt ''出力/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt '
>>>(「マップ/ map.scss」)オープン印刷してください。読み()
@mixinのmy_callback($ディレクティブ、$パス){
  @if $パス== "サブディレクトリ/ bar.txt" {#{$ディレクティブ}:URL(「Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt "); }
  @else場合$パス== "foo.txtの" {#{$ディレクティブ}:URL(「C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt "); }
  @else {
  @warn「見つかりませんでした "#"資産のリストで「{$パス};
 #{$ディレクティブ}:URL($パス);
 }
}
PHP
>>>システム(「hashedassets -n my_callbackマップ/ map.php入力/ *。txtの入力/ * / *。TXT出力/」)
CP「入力/ foo.txtの ''出力/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」
CP「入力/サブディレクトリ/ bar.txt ''出力/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt '
>>>(「マップ/ map.php」)オープン印刷してください。読み()
$ my_callback =配列(
  "サブディレクトリ/ bar.txt" => "Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt」、
  "foo.txtの" => "C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」、
)
セッド
また、私たちのために置換を行いsedスクリプトを生成できます。
>>>システム(「hashedassets -n my_callbackマップ/ map.sed入力/ *。txtの入力/ * / *。TXT出力/」)
CP「入力/ foo.txtの ''出力/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」
CP「入力/サブディレクトリ/ bar.txt ''出力/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt '
>>>(「マップ/ map.sed」)オープン印刷してください。(リード)
S / SUBDIR /バー .txtの/ Ys23Ag_5IOWqZCw9QGaVDdHwH00 .txtファイル/ gの
S / fooの .TXT / C-7Hteo_D9vJXQ3UfzxbwnXaijM .txtファイル/ gの
また、SEDと直接これを使用することができるはずです
>>>オープンで(「replaceme.html "、" W ")ファイルとして:
... file.write( '
スクリプトは、次のように適用されます。
>>>システム(「SED -fマップ/ map.sed replaceme.html」)
しかし、 '。'ワイルドカードとして扱われていないので、以下は動作しません。
>>>オープンで(「replaceme2.html "、" W ")ファイルとして:
... file.write( '
>>>システム(「SED -fマップ/ map.sed replaceme2.html」)
-tとタイプを指定します
マップのタイプは、ファイル名から推測されますが、同様にそれを指定することができます。
>>>システム(「hashedassets -t JS cantguessmaptype入力/ *。txtの入力/ * / *。TXT出力/」)
CP「入力/ foo.txtの ''出力/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」
CP「入力/サブディレクトリ/ bar.txt ''出力/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt '
-lとファイル名の長さを指定します
>>>システム(「hashedassets -l 10マップ/ shortmap.json入力/ *。txtの入力/ * / *。TXT出力/」)
CP「入力/ foo.txtの ''出力/ C-7Hteo_D9.txt」
CP「入力/サブディレクトリ/ bar.txt ''出力/ Ys23Ag_5IO.txt '
>>>システム(「RM出力/ C-7Hteo_D9.txt出力/ Ys23Ag_5IO.txt」)
-dでダイジェストを指定します
>>>システム(「hashedassets -d MD5マップ/ shortmap.json入力/ *。txtの入力/ * / *。TXT出力/」)
CP「入力/ foo.txtの ''出力/ rL0Y20zC-Fzt72VPzMSk2A.txt」
CP「入力/サブディレクトリ/ bar.txt ''出力/ N7UdGUp1E-RbVvZSTy1R8g.txt」
>>>システム(「RM出力/ rL0Y20zC-Fzt72VPzMSk2A.txt出力/ N7UdGUp1E-RbVvZSTy1R8g.txt」)
マップを使用して再
プログラムは、それが唯一以降に変更されていないファイルをコピーする前に、実行中に作成されたマップを読み込みます。そこで、以下のコマンドは、任意のファイルをコピーしません。
>>>システム(「hashedassetsマップ/ map.scss入力/ *。txtの入力/ * / *。TXT出力/」)
>>>システム(「hashedassetsマップ/ map.php入力/ *。txtの入力/ * / *。TXT出力/」)
>>>システム(「hashedassetsマップ/ map.js入力/ *。txtの入力/ * / *。TXT出力/」)
>>>システム(「hashedassetsマップ/ map.json入力/ *。txtの入力/ * / *。TXT出力/」)
>>>システム(「hashedassetsマップ/ map.sed入力/ *。txtの入力/ * / *。TXT出力/」)
>>>システム(「hashedassetsマップ/ map.jsonp入力/ *。txtの入力/ * / *。TXT出力/」)
>>>システム(「hashedassetsマップ/ map.txt入力/ *。txtの入力/ * / *。TXT出力/」)
我々は、間に、入力ファイルのいずれかをタッチすると、ファイルが読み込まれますが、hashsumが同じであるため、コピーされません。
>>>システム(「触れ-t200504072214.12入力/ foo.txtの ')
>>>システム(「hashedassetsマップ/ map.json入力/ *。txtの入力/ * / *。TXT出力/」)
我々は、ファイルの内容を変更する場合は、新しい名前を取得します。
>>>(「入力/ foo.txtの「「W」)開いているファイルなどを持ちます:
... file.write(「foofoo」)
>>>システム(「hashedassetsマップ/ map.json入力/ *。txtの入力/ * / *。TXT出力/」)
RM「出力/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt」
CP「入力/ foo.txtの ''出力/ QIDaFD7KLKQh0l5O6b8exdew3b0.txt '
あなたは、ディレクトリ内のファイルを一覧表示する場合は、古いファイル ''出力/ C-7Hteo_D9vJXQ3UfzxbwnXaijM.txt ''がなくなっていることに注意してください:
>>>システム(「LS出力/」)
QIDaFD7KLKQh0l5O6b8exdew3b0.txt
Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt
私たちが作成したファイルのいずれかを削除する場合は、再作成されます:
>>>システム(「RM出力/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt」)
>>>システム(「hashedassetsマップ/ map.json入力/ *。txtの入力/ * / *。TXT出力/」)
CP「入力/サブディレクトリ/ bar.txt ''出力/ Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt '
>>>システム(「LS出力/」)
QIDaFD7KLKQh0l5O6b8exdew3b0.txt
Ys23Ag_5IOWqZCw9QGaVDdHwH00.txt
オリジナルのコンテンツが変更されたため、削除されようとしているファイル場合は、再作成されません。
>>>システム(「RM出力/ QIDaFD7KLKQh0l5O6b8exdew3b0.txt」)
>>>(「入力/ foo.txtの「「W」)開いているファイルなどを持ちます:
... file.write(「foofoofoo」)
>>>システム(「hashedassetsマップ/ map.json入力/ *。txtの入力/ * / *。TXT出力/」)
CP「入力/ foo.txtの ''出力/ NdbmnXyjdY2paFzlDw9aJzCKH9w.txt '
エラー処理
我々は引数なしでこれを実行する場合は、それは失敗します。
>>>システム(「hashedassets」、外部=真)
使用法:hashedassets [オプション] MAPFILE SOURCE [...] DEST
hashedassets:エラー:あなたは、少なくともMAPFILE SOURCEとDEST
この要件を指定する必要があります。
Pythonの
コメントが見つかりません