我有YUI项目被mavenized。当我们发布新的YUI代码时,它不会立即反映在浏览器中,直到您在浏览器上执行SHIFT + REFRESH。
我一直在使用YUI模块方法来加载这样的脚本:
YUI.GlobalConfig = {
modules: {
'manual-entry-util': {
fullpath: 'resources/js/common.js',
requires: [ 'node']
},
'user-perm-util' : {
fullpath: 'resources/js/userPermUtil.js',
requires: [ 'node', 'io-base', 'json', 'json-stringify']
},
'file-upload-custom' : {
fullpath: 'resources/js/fileUploadCustom.js',
requires: [ 'gallery-datatable-selection','event-custom', 'node']
},
'icsd-uploader' : {
fullpath: 'resources/js/icsdUploader.js',
requires: [ 'uploader', 'node']
},
'ui-util' : {
fullpath: 'resources/js/uiUtil.js',
requires: [ 'node']
}
}
};
我认为我们需要修改网址以获得某种变量,以便浏览器可以获取新代码。
有没有办法通过maven或其他工具自动执行此过程。例如。哪个可以从.js文件的内容生成哈希值,然后将其添加到.js文件的URL?
答案 0 :(得分:2)
我的方法是在资源路径的开头包含缓存清除值。适当的值可能是当前缩写的提交哈希值或修订号,或者如果使用CI工具,则是当前的内部版本号。您的构建过程会将您的所有资产部署到以此值命名的目录中,因此,如果您当前的提交哈希值为abcd1234
,那么您最终会得到resources/abcd1234/js/
之类的文件。
您的构建过程还需要动态修改YUI.GlobalConfig
对象,可能使用令牌替换,以便YUI Loader可以在那里找到您的文件。这可以通过设置base
配置选项(请参阅http://yuilibrary.com/yui/docs/yui/loader.html#configuration-options)在一个位置完成,但由于您为每个文件指定了fullpath
,因此您必须设置每个这些
在开发过程中,您必须继续硬重新加载页面(正如您现在使用SHIFT + REFRESH所做的那样),但您的用户将分别缓存每个版本的资源。
答案 1 :(得分:0)
我们使用@blicksky答案的变体。我们构建了自己的组合加载器作为servlet。
首先,我们将YUI设置为自己的Maven项目。版本标记反映了YUI的发布,因此您的版本看起来像<version>3.17.2</version
。我们有一个内部仓库,因此YUI项目的任何更新都会在那里发布。 YUI项目只包含/ src / main / resources / META-INF / resources中的YUI副本。在这方面,它与WebJars project采用的方法非常相似。
Combo-loader负责将YUI文件连接在一起以获得更好的加载性能,并且还负责添加缓存破坏URL参数。在生产中,该参数是构建ID,但在开发中,该参数可以是随机数,以便每次都加载资源。我们在服务器上使用Spring,因此我们使用Classpath来解析来自上面提到的YUI Maven项目的YUI文件。基本要点是我们的Servlet实现了ResourceLoaderAware,然后可以使用ResourceLoader来获取要提供的YUI文件。
这种方法很好地帮助了我们,并且允许我们对文件的处理方式进行非常精细的控制,以及改善加载时间。