我最近通过使用 RequireJS 的urlArgs
配置选项解决了这个问题。我怀疑实际上重命名文件以包含时间戳是否可行,这会使构建和 RequireJS 配置复杂化很多,并且很可能需要 hack 来进行开发或生产。所以,按逻辑顺序:
在 pom.xml 中:
<properties>
(...)
<build.version>${maven.build.timestamp}</build.version>
</properties>
在主 JSP 文件中:
<script type="text/javascript">
var require = {
(...)
urlArgs: 'v=${build.version}',
};
</script>
<link rel="stylesheet" type="text/css" href="style.css?v=${build.version}"></link>
<script data-main="app" src="libs/require.js?v=${build.version}"></script>
在 require.js 导入之前定义require
对象以使 urlArgs 工作很重要
pom.xml,再次:
<resources>
(...)
<resource>
<targetPath>${project.build.directory}/filteredWebapp</targetPath>
<directory>src/main/webapp</directory>
<filtering>true</filtering>
</resource>
</resources>
r.js 的 buildconfig(顺便说一句。我正在使用 requirejs-maven-plugin来桥接 Maven 和 r.js):
({
appDir: '${project.build.directory}/filteredWebapp',
dir: '${project.build.directory}/${project.build.finalName}',
(...)
})
我必须将过滤 src/main/webapp 的结果存储在一个新文件夹(即filteredWebapp
)中,以确保 r.js 的输入已经包含构建时间戳而不是占位符。我最初的 r.js buildconfig 版本是直接从 src/main/webapp 读取源文件;工作正常,但绕过了 maven 过滤(即 r.js 编译的输出仍然包含${build.timestamp}
占位符)
注意:配置开发版本以使用这种机制可能很棘手(如果可能的话,我还没有尝试过)。不过,对我来说,“v=${build.timestamp}”参数的存在和缓存破坏的缺乏在实践中并不是问题。
在此过程中还有许多其他障碍和陷阱,但我假设您设法解决了这些问题,因为您只是专门要求指纹识别。希望有帮助!