我的依赖项之一使用以下内容将窗口传递给它的关闭
(function (window) {
//
})(this)
暂时我可以把它改成更合理的东西,这样它就不会破坏浏览器化,但是有没有一些方法可以this
在浏览器化模块中强制一个值?
我的依赖项之一使用以下内容将窗口传递给它的关闭
(function (window) {
//
})(this)
暂时我可以把它改成更合理的东西,这样它就不会破坏浏览器化,但是有没有一些方法可以this
在浏览器化模块中强制一个值?
我写了一个名为“moduleify”的browserify转换,它通常应该做你想要的,即将有问题的代码包装在一个看起来有点像这样的IIFE中:
(function () {
// this === window
}.call(window));
事实上,我的实现并不比这复杂多少。
最初的想法是导出一个污染全局的“模块”,就好像它是一个 CommonJS 模块(例如,有 AngularJS 导出window.angular
),但是因为它包含那个包装器,所以它应该可以解决问题。
有关说明,请参阅自述文件。如果有问题的脚本实际上没有任何可以合理导出的内容,只需将其导出window
(这将导致module.exports = window['window']
)或不存在的任意名称(导致undefined
)。
如果您想window
在自己的 browserify 代码中访问该对象,还请查看global模块,它提供了一个很好的包装器,可以在 CommonJS 模块中安全地访问浏览器全局变量。
为了解决这个特定的问题,一个简单的转换,将代码包装在一个自调用函数中,就可以完成这项工作。
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