我正在研究小型JS库,我希望能够在不同的项目中使用。
我的问题如下:我需要一些数据,这些数据是在另一个JS项目的几个文件中定义的,我不控制源代码。这些文件的结构如下:
(function() {
var exportObj;
exportObj = typeof exports !== "undefined" && exports !== null ? exports : this;
exportObj.??? = ...;
}).call(this);
现在,我可以通过在全局范围内定义exports
变量来防止全局命名空间污染。然后,我可以在外部文件加载后将其重命名为我想要的任何内容。
但是,如果我需要与另一个使用exportObj = typeof exports ...
模式的脚本并行工作,这将无法正常工作,因为我也会从该脚本中捕获所有定义。
无论如何我可以定义用于执行我需要包含的外部JS文件的this
的值吗?这样我就可以将定义重定向到我选择的变量,而不会影响真正在全局exports
变量上的任何其他脚本。
答案 0 :(得分:0)
有可能将这些文件的内容包装在完全相同的模式中,从而导致类似
的内容(function () {
(function() {
var exportObj;
exportObj = typeof exports !== "undefined" && exports !== null ? exports : this;
exportObj.??? = ...;
}).call(this);
}).call(yourNamespace);
如果您不控制源,您可以尝试通过服务器代理它并为您包装。您还可以尝试将脚本作为文本获取,将其包装在客户端中然后插入它。这两种听起来都很糟糕,但可能是解决问题的最简单方法,而不会过于干扰和聪明。