2

我现在有一个真正的问题,当我在生产中并且每当我更新我的 CSS 或 JS 时,相同的文件会继续从服务器提供服务。我需要获取新的更新,然后我必须硬刷新浏览器,

我正在考虑一种在缩小文件名末尾添加构建版本的方法,因此,当我的文件被更新并且 Grunt 缩小我的文件时,它将输出一个完美的链接,该链接将由网络浏览器新下载

现在链接是这样的

<script src="/min/production.min.js"></script>

我需要这样,

(<script src="/min/production[timestamp].min.js"></script>)
4

2 回答 2

3

我所做的如下

任务/uglify.js

替换以下行

dest:'.tmp/public/min/production.min.js' 

dest: global.productionJSName 

任务/sails-linker.js

将以下变量添加到您的任务中

global.timestamp = global.timestamp || new Date().getTime();
global.productionJSName = '.tmp/public/min/production-' + global.timestamp + '.min.js';

module.exports = function(grunt) {
    var productionJSName = global.productionJSName // Add this
    ...

替换productionJSName的所有旧路径

...
prodJs : {
    ...
    files: {
            '.tmp/public/**/*.html': [productionJSName],
            'views/**/*.html': [productionJSName],
            'views/**/*.ejs': [productionJSName]
        }
}
...
prodJsRelative : {
    ...
    files: {
            '.tmp/public/**/*.html': [productionJSName],
            'views/**/*.html': [productionJSName],
            'views/**/*.ejs': [productionJSName]
        }
}
...
prodJsJade : {
    ...
    files: {
            'views/**/*.jade': [productionJSName]
        }
}
...
prodJsRelativeJade : {
    ...
    files: {
            'views/**/*.jade': [productionJSName]
        }
}

我不确定这是最好的方法,如果您找到更好的解决方案,请告诉我。

于 2015-04-19T08:37:11.770 回答
1

我想我已经找到了解决静态问题的最简单解决方案。例如在tasks/sails-linker.js 中

prodJs: {
        options: {
            startTag: '<!--SCRIPTS-->',
            endTag: '<!--SCRIPTS END-->',
            fileTmpl: '<script src="%s?v=<%- (new Date()).getTime() %>"></script>',
            appRoot: '.tmp/public'
        },
        files: {
            '.tmp/public/**/*.html': ['.tmp/public/min/production.min.js'],
            'views/**/*.html': ['.tmp/public/min/production.min.js'],
            'views/**/*.ejs': ['.tmp/public/min/production.min.js']
        }
    },

因此,您只需添加一个带有时间戳 ( <%- (new Date()).getTime() %>) 的模板注入。

于 2015-04-20T12:37:02.783 回答