如何在缩小文件的末尾添加构建时间戳
How to add a build timestamp at the end of the minified files
我现在有一个真正的问题,当我在生产时,每当我更新我的 CSS 或 JS 时,相同的文件一直从服务器提供服务。我需要获得新的更新然后我必须用力刷新浏览器,
我正在考虑在我的缩小文件名末尾添加一个构建版本,所以每当我的文件更新并且 Grunt 缩小我的文件时,它会输出一个完美的 link将被网络浏览器新下载
现在link是这样的
<script src="/min/production.min.js"></script>
我需要这样,
(<script src="/min/production[timestamp].min.js"></script>)
我为此所做的工作如下
tasks/uglify.js
替换下一行
dest:'.tmp/public/min/production.min.js'
和
dest: global.productionJSName
tasks/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]
}
}
我不确定这是最好的方法,如果您找到更好的解决方案,请告诉我。
我想我找到了解决静态刷新问题的最简单方法。
例如在 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() %>
)。
我现在有一个真正的问题,当我在生产时,每当我更新我的 CSS 或 JS 时,相同的文件一直从服务器提供服务。我需要获得新的更新然后我必须用力刷新浏览器,
我正在考虑在我的缩小文件名末尾添加一个构建版本,所以每当我的文件更新并且 Grunt 缩小我的文件时,它会输出一个完美的 link将被网络浏览器新下载
现在link是这样的
<script src="/min/production.min.js"></script>
我需要这样,
(<script src="/min/production[timestamp].min.js"></script>)
我为此所做的工作如下
tasks/uglify.js
替换下一行
dest:'.tmp/public/min/production.min.js'
和
dest: global.productionJSName
tasks/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]
}
}
我不确定这是最好的方法,如果您找到更好的解决方案,请告诉我。
我想我找到了解决静态刷新问题的最简单方法。 例如在 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() %>
)。