在browserify中传递给此窗口

我的一个依赖使用以下方法将窗口传递给它的闭包

(function (window) { // })(this) 

暂时我可以把它变成更明智的东西,以便它不会打破browserify,但有一些方法,我可以在浏览模块中强制这个值?

我写了一个名为“模块化”的browserify转换 ,通常应该做你想要的,也就是把有问题的代码包装在一个看起来有点像这样的IIFE中:

 (function () { // this === window }.call(window)); 

事实上, 我的实现并不比这更复杂。

最初的想法是导出一个全局污染的“模块”,就像它是一个CommonJS模块(例如,有AngularJS导出window.angular ),但是因为它包含该包装,它应该做的伎俩。

有关说明,请参阅自述文件。 如果有问题的脚本实际上没有任何东西可以合理地导出,只需要将其导出window (这将导致module.exports = window['window'] )或任意名称不存在(导致undefined ) 。

如果你想访问你自己的浏览器代码中的window对象,也可以看看全局模块,这个模块提供了一个很好的包装来访问CommonJS模块中的浏览器全局variables。

为了解决这个特定的问题,一个简单的转换,将代码包装在一个自我调用函数中,将完成这项工作。

CoffeeScript的

 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) 

JavaScript的

 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

Interesting Posts