Lightningから静的リソースファイルを読み込む場合、静的リソースに設定したJS/CSSファイルがサーバでキャッシュされて読み込まれない時がありますが、まあ単純にキャッシュを無効にするように読み込み時の静的リソースにクエリ文字列をくっつけてやるのがよいと思います。理想的には読み込むコンテンツのハッシュ値などですが、デプロイ時のタイムスタンプでもそれほど悪くないでしょう。
タイムスタンプの追加はデプロイ前にビルドプロセスでやりましょう。Gulpならpipe処理で中間ファイル作らずに可能です。
あらかじめコンポーネント定義ファイルにはタイムスタンプが置換される場所に適当な文字列(ここでは__NOCACHE__
としている)を埋め込んでおきます。
MyComponent.cmp
<aura:component>
<ltng:require
scripts="/resource/MyComponent/scripts/main.js?__NOCACHE__"
styles="/resource/MyComponent/styles/main.css?__NOCACHE__"
afterScriptsLoaded="{!c.doInit}" />
<div class="cmp-root"></div>
</aura:component>
あとはgulp-if
とgulp-replace
とを組み合わせ、パッケージのzip圧縮前に置換ロジックを挿入します。
gulpfile.coffee
#
gulpif = require "gulp-if"
replace = require "gulp-replace"
#
gulp.task "deploy", ->
ts = Date.now() # Timestamp
gulp.src "pkg/**/*", base: "."
.pipe gulpif("**/*.cmp", replace(/__NOCACHE__/g, ts))
.pipe zip('pkg.zip')
.pipe forceDeploy
username: process.env.SF_USERNAME
password: process.env.SF_PASSWORD
.pipe notify('Deploy Completed')
デプロイ後のファイルは以下のようになるはずです。
MyComponent.cmp
<aura:component>
<ltng:require
scripts="/resource/MyComponent/scripts/main.js?1437045298381"
styles="/resource/MyComponent/styles/main.css?1437045298381"
afterScriptsLoaded="{!c.doInit}" />
<div class="cmp-root"></div>
</aura:component>
デプロイのたびにタイムスタンプの数値は書き換わるので、キャッシュされるのを回避できます。