我的一个依赖项使用以下内容将窗口传递给它的闭包
(function (window) {
//
})(this)
暂时我可以将它更改为更合理的东西,这样它就不会破坏浏览器化,但是有一些方法可以在浏览器模块中强制this
的值吗?
答案 0 :(得分:3)
我wrote a browserify transform called "moduleify"通常应该做你想要的,即将违规代码包装在看起来像这样的IIFE中:
(function () {
// this === window
}.call(window));
事实上,my implementation并不比那更复杂。
最初的想法是出口一个全球污染的"模块"好像它是一个CommonJS模块(例如,有AngularJS导出window.angular
),但因为它包含那个包装器,它应该可以解决问题。
有关说明,请参阅自述文件。如果违规脚本实际上没有合理导出的内容,只需将其导出window
(这将导致module.exports = window['window']
)或任意名称不存在(结果)在undefined
)。
如果您想在自己的browserify代码中访问window
对象,还可以查看global模块,它提供了一个很好的包装器,可以安全地在CommonJS模块中访问浏览器全局变量。
答案 1 :(得分:0)
要解决这个特定的问题,在自调用函数中包装代码的简单转换将完成这项工作。
through = require('through')
fenestrate = (file) ->
data = ';(function() {\n';
write = (buf) ->
data += buf
end = ->
data += '\n}).call(window);'
this.queue(data)
this.queue(null)
through(write, end)
var through = require('through');
var fenestrate = function(file) {
var data, end, write;
data = ';(function() {\n';
write = function(buf) {
return data += buf;
};
end = function() {
data += '\n}).call(window);';
this.queue(data);
return this.queue(null);
};
return through(write, end);
};
撰写变换:https://github.com/substack/browserify-handbook#transforms