繁体   English   中英

Requirejs - 版本控制

[英]Requirejs - versioning

快速注释 - 通过版本控制我的意思是出于缓存破坏的目的。 在脚本请求结束时添加查询参数的常见做法并不适用于所有浏览器。 到目前为止,我发现的最简单,最混乱的方法是对整个部署文件夹名称进行版本控制。

-- scripts.v1
-- scripts.v2

但是这非常混乱并且部署时间也很长(我使用S3作为我的cdn)。 有没有人知道另一种方法呢?

编辑

看来,我还不是很清楚。 让我更明确一点。

我在我的网站上使用requirejs。 它是一个非常JavaScript的应用程序,经常更新和迭代。 现在有了requirejs,我能够可靠地确保浏览器提供最新版本的唯一方法是对我的整个部署文件夹名称(javascript)进行版本化并再次将整批文件上传到S3。 然后,我使用data-main方法设置项目的基本路径。

由于许多原因,这非常麻烦。 即使代码更改只是几行,也必须重复整个过程。 还有其他一些不错的方法让requirejs知道文件有版本吗? 如同,如果我打电话

require(["superImportantJSFile"], function(){})

它会知道当前版本是superImportantJSFile.v4.js或者其他类似的东西。

我希望我现在更清楚了。 关于社区如何做到这一点的任何建议? 我很确定这必须是一个常见的场景,但我还没有找到一个好的解决方案

HTML5 Boilerplate提供了我见过的最优雅的解决方案之一。 他们有可用于Apachenginx的配置 从那里你可以在script标签中添加时间戳到文件名,如下所示:

<script src="scripts/app.20130728.js"></script>

哪个Web服务器将重写为scripts/app.js

我喜欢使用构建后步骤,将静态资源放入一个文件夹,其中包含版本控制版本号的路径。 例如,源控件修订版号1234将导致创建路径:/ 1234 / scripts / *。 这些目录也在CDN中创建,其中包含正确的资产版本。

在模板中的require.js配置中,我们将baseURL替换为适当的版本,该版本通过配置文件控制,例如:

var require = {
    baseUrl: "%%resDir%%",
    ...
};

这样可以轻松地在几个不同的版本之间更改资产版本,这些版本都可以保留在CDN上而不会引起任何冲突。 它还解决了浏览器缓存破坏问题。

您可以使用map (请参阅http://requirejs.org/docs/api.html#config-map )为RequireJS配置添加别名,例如:

require.config({ /* ... other config.... */
     map: { '*': {'superImportantJSFile': 'superImportantJSFile.v4'} }
})

所以你只有一个地方可以更新:)

您提到使用CDN这是一个很好的用例,不会将这些文件放在最小化的r.js包中(如果您使用的是该工具)。 但是如果这些文件经常更新,也许用r.js打包模块并更新整个代码是有意义的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM