LoginSignup
10
10

More than 5 years have passed since last update.

静的リソースをキャッシュさせない

Posted at

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-ifgulp-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>

デプロイのたびにタイムスタンプの数値は書き換わるので、キャッシュされるのを回避できます。

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10