是否可以通过 dojo 的 AMD 加载器向 dojo 模块请求添加请求参数

Posted

技术标签:

【中文标题】是否可以通过 dojo 的 AMD 加载器向 dojo 模块请求添加请求参数【英文标题】:Is it possible to add a request parameter to dojo module requests via dojo's AMD loader 【发布时间】:2013-04-19 17:10:13 【问题描述】:

在向服务器发送 AMD 模块的请求之前,是否可以修改 dojo AMD 加载程序使用的请求 url?我想附加一个带有版本号的请求参数。

我们试图解决的问题是我们希望浏览器缓存我们的 javascript 文件,除非应用程序的版本已更新。如果我们可以在请求的 URL 中添加版本号,我认为我们应该能够做到这一点。

【问题讨论】:

【参考方案1】:

paths 配置属性似乎适用于单个模块,cacheBust 可用于所有模块。 Example jsfiddle.

<script>
var dojoConfig = 
    paths: 
        // version a single file by using path with version number
        "aa": "mylib-aa.js?v=1.0",
        // standard path, no explicit versioning
        "bb": "mylib-bb"
    ,
    // use v=1.0 for ALL loaded modules
    cacheBust: "v=1.0",
    waitSeconds: 10
;
</script>
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.8.3/dojo/dojo.js"></script>
<script>
require(["aa", "bb"], function () );
</script>

给予:

"NetworkError: 404 Not Found - https://ajax.googleapis.com/ajax/libs/dojo/1.8.3/dojo/mylib-aa.js?v=1.0.js&v=1.0"
"NetworkError: 404 Not Found - https://ajax.googleapis.com/ajax/libs/dojo/1.8.3/dojo/mylib-bb.js?v=1.0"

paths 方法的问题在于尾随的“.js”,但出于版本控制的目的,我认为这不是问题,因为 URL 在您希望的方式中仍然是唯一的。

【讨论】:

不管包如何,将相同的 http 参数附加到所有请求中怎么样?有没有办法配置它? 是的,这可以通过 cacheBust 配置参数 - github.com/dojo/dojo/blob/1.8.3/dojo.js#L527 来实现。 感谢 Paul,您的回答很有帮助,但对 David 的问题的回答将是一个想法。如果有办法在所有包中做到这一点,那就更好了。 我们正在避免缓存破坏方法,因为我们希望允许缓存 js,除非版本更改。 cacheBust: "v=1.0" 将工作。然后cacheBust: "v=1.1"当你要升级等时。

以上是关于是否可以通过 dojo 的 AMD 加载器向 dojo 模块请求添加请求参数的主要内容,如果未能解决你的问题,请参考以下文章

AMD 和 Dojo 1.7 问题

使用 Dojo AMD 加载程序加载 jQuery 问题

是否已经存在支持 Dojo AMD、NodeJS 要求和浏览器窗口的代码。 [something] 用于 Javascript 微库

使用 dojo AMD 加载条件模板(html)

如何在 Dojo AMD 中包含遗留模块

如何从AMD dojo创建构建