V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
taoche
V2EX  ›  程序员

询问一下,静态资源清除缓存的办法,目前使用 grunt

  •  
  •   taoche · 2014-11-03 12:05:28 +08:00 · 6603 次点击
    这是一个创建于 3672 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想请教一下有经验的大大,前端静态资源如何做到 不修改文件的情况下给 js css 文件加时间戳/MD5戳。

    目前做法是 用 sea.js 的map 配置文件加版本号,但是它自身config.js 不能做到清除缓存。
    之前也用grunt的 rev + usemin 做过,但是替换文件名 在根据替换后的文件名做到修改html文件的引用地址,个人感觉过于危险,不好管理。

    搜了一遍grunt的插件库,也没有发现 '.js?v=1010' 这些不修改 js css文件名 而单独修改html的引用的办法。

    麻烦有经验的同学说下解决办法。谢谢!
    19 条回复    2014-11-04 00:31:56 +08:00
    takatost
        1
    takatost  
       2014-11-03 13:31:56 +08:00
    百度FIS
    taoche
        2
    taoche  
    OP
       2014-11-03 13:39:32 +08:00
    @takatost 这个我知道,但是没办法改用FIS
    yakczh
        3
    yakczh  
       2014-11-03 13:59:23 +08:00
    如果测试环境测试完成了,传到线上服务器,是先打包后再传到线上,还是传到线上再打包?
    ccccccc
        4
    ccccccc  
       2014-11-03 14:06:24 +08:00
    用这个 grunt replace
    lisposter
        5
    lisposter  
       2014-11-03 14:08:00 +08:00
    usemin 不是可以替换 html 中引用的么

    我司前端产品就这么弄的,已经跑很久了 没问题
    taoche
        6
    taoche  
    OP
       2014-11-03 14:14:44 +08:00
    @lisposter 引用文件的文件名要进行修改。。 a.js -> a.xxxxxx.js -> html->修改静态引用。
    lisposter
        7
    lisposter  
       2014-11-03 14:18:29 +08:00
    @taoche 是的呀 就是这样
    robertlyc
        8
    robertlyc  
       2014-11-03 14:19:27 +08:00
    rails asset pipeline
    chshouyu
        9
    chshouyu  
       2014-11-03 14:29:10 +08:00
    usemin 好好研究一下

    http://kanfang.chshouyu.com/#/home

    可以参考
    taoche
        10
    taoche  
    OP
       2014-11-03 14:35:33 +08:00
    @lisposter 我是不想不修改 css js文件的情况下。
    taoche
        11
    taoche  
    OP
       2014-11-03 14:36:08 +08:00
    @chshouyu 不修改 css js文件名的情况下。
    nigelvon
        12
    nigelvon  
       2014-11-03 14:44:02 +08:00
    后面自动加版本号或者时间戳吧 比如jquery.js?v=1.0.0
    taoche
        13
    taoche  
    OP
       2014-11-03 14:50:08 +08:00   ❤️ 1
    @nigelvon 是的,但是我的项目是前后端分离的,时间戳不能由后端产生。
    andy12530
        14
    andy12530  
       2014-11-03 17:56:23 +08:00
    @taoche 有改动的话,将改动文件的版本号时间写入一个config.js里,然后将文件版本号输入在页面底部。

    seajs加载文件时候,在loadJS loadCSS的函数里,把文件的 URL 拼接一下。

    abc.js => abc.__时间戳__.js
    lisposter
        15
    lisposter  
       2014-11-03 20:29:19 +08:00
    @taoche 那更简单了 https://www.npmjs.org/package/grunt-htmlrefs 有个叫 buildNumber 的选项,把你算好的版本号,时间戳也好,md5 也好 传进去就好了


    不过,如果你的静态文件是放 cdn 的话,还是改文件名的好
    yakczh
        16
    yakczh  
       2014-11-03 20:53:19 +08:00
    如果js/css文件修改了,这个打包过程是自动的,还是手动的?
    taoche
        17
    taoche  
    OP
       2014-11-04 00:27:16 +08:00
    @yakczh 自动
    taoche
        18
    taoche  
    OP
       2014-11-04 00:27:26 +08:00
    @lisposter 谢谢 我看看
    taoche
        19
    taoche  
    OP
       2014-11-04 00:31:56 +08:00
    @andy12530 sea.js 本身的config.js 没办法清除缓存。 应该是这样吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1666 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:48 · PVG 00:48 · LAX 08:48 · JFK 11:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.