【问题标题】:RequireJS module detectionRequireJS 模块检测
【发布时间】:2015-07-28 18:10:23
【问题描述】:
在我的项目中,我使用了一些 RequireJS 模块。我使用 Require JS 优化器 (r.js) 将它们进一步打包到各种模块中。因此,如果我们在打包后需要 a.js、b.js、c.js 和 d.js 等模块,我们会得到:
abc.js(是a.js和b.js的组合)
a.js,
b.js
def.js(这是c.js和d.js的组合)
c.js,
d.js
我们已将这些模块 abc.js 和 def.js 提供在 CDN 上,最终用户可以使用它。有没有办法找出谁在使用 a.js 以及谁在使用 b.js?我的意思是,我们可以检测谁在他们的应用程序中下载了哪个模块。这变得有点棘手,因为有时它也会从浏览器缓存中加载。至少我们可以在abc.js和def.js的层面做到吗?
【问题讨论】:
标签:
javascript
requirejs
r.js
【解决方案1】:
问题是,如果您将两个模块分布在同一个文件中,那么您需要一些方法来跟踪每个模块的使用情况(对吗?)并且使事情进一步复杂化,浏览器缓存静态文件,其他用户可以下载您的模块和自托管等。
我认为这是一个稍微越位的解决方案,但它应该可以工作。你可以获取一个像 Segment.IO 这样的 JavaScript 分析库:
https://segment.com
在模块 A 的定义中(在它的“工厂”或定义块内),您可以跟踪它的使用情况:
analytics.track('module A was required');
同样在模块 B 的定义中:
analytics.track('module B was required');
这样,即使它们在同一个文件中定义并且可以被缓存,只有当用户需要单个模块时,您才会触发跟踪调用,因此您将确切知道何时使用您的某个模块.