Requirejs 用假名称替换模块ID
设想一个AMD Java脚本应用程序,由三个具有这些ID的模块组成:Requirejs 用假名称替换模块ID,requirejs,obfuscation,amd,requirejs-optimizer,Requirejs,Obfuscation,Amd,Requirejs Optimizer,设想一个AMD Java脚本应用程序,由三个具有这些ID的模块组成: 通用/核心/api 通用/数据/foo 公共/远程/酒吧 当我使用r.js构建优化文件时,这些ID仍然在编译文件中。我认为这是没有必要的。例如,当我搜索并替换以下内容时,优化的文件仍然有效: 通用/核心/api->a 通用/数据/foo->b 通用/远程/条形->c 替换的优点是: 较小的文件大小 更好的隐蔽性 (是的,您永远不应该信任客户机。不过,替换模块名称需要反向工程师进行猜测,而不是通过模块名称立即查找应用程序
- 通用/核心/api
- 通用/数据/foo
- 公共/远程/酒吧
- 通用/核心/api->a
- 通用/数据/foo->b
- 通用/远程/条形->c
(是的,您永远不应该信任客户机。不过,替换模块名称需要反向工程师进行猜测,而不是通过模块名称立即查找应用程序的重要部分)
r.js
添加额外的代码路径,这将需要测试define(function (require) {
var deps = ['a', 'b'];
if (some_condition)
deps.push('c');
require(deps, function () { ... });
});
RequireJS无法跟踪require
调用中的依赖项,因为令牌deps
不是字符串的文本数组。但是,目前可以在传递给r.js
的配置中进行补偿:a
,b
,c
可以作为显式包含项列出。问题解决了。但是,如果r.js
重命名模块,则必须自动更改名称a
、b
和c
。为此,r.js
必须使用JavaScript解析器来解析代码并对其进行修改。目前尚不清楚的是,在一般情况下,它是否能够找出需要修改的内容r.js
更改为在可能的情况下执行,则会使r.js
比它复杂得多,以便处理一个相当特殊的需求,而这个需求可以在r.js
之外处理没有工具或配置选项可以为您执行此操作。无论
r.js
为您做什么,理论上都可以在调用r.js
之前作为构建阶段来完成。在将文件传递到r.js
之前,您必须编写自己的工具来执行转换,谢谢您的回答。我没有考虑动态构建依赖项,因为我所有的依赖项都是静态的。我现在明白了,替换是一个特例。我已经考虑过编写一个工具,对优化后的文件进行后期处理,并通过regex替换模块名。您的想法是对其进行预优化。你对此有具体的想法吗?我看到的唯一预优化解决方案是重命名文件夹、文件和依赖项,然后启动优化过程。