Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在browserify中将窗口传递给此_Javascript_Node.js_This_Browserify - Fatal编程技术网

Javascript 在browserify中将窗口传递给此

Javascript 在browserify中将窗口传递给此,javascript,node.js,this,browserify,Javascript,Node.js,This,Browserify,我的一个依赖项使用以下函数将窗口传递到它的闭包 (function (window) { // })(this) 目前,我可以将其更改为更合理的值,这样就不会破坏browserify,但是否有某种方法可以在browserify模块中强制为this设置一个值?I通常应该做您想要的事情,即将有问题的代码包装在一个类似这样的生活中: (function () { // this === window }.call(window)); 事实上,它并不比这复杂多少 最初的想法是导出一个globa

我的一个依赖项使用以下函数将窗口传递到它的闭包

(function (window) {
   //
})(this)
目前,我可以将其更改为更合理的值,这样就不会破坏browserify,但是否有某种方法可以在browserify模块中强制为
this
设置一个值?

I通常应该做您想要的事情,即将有问题的代码包装在一个类似这样的生活中:

(function () {
// this === window
}.call(window));
事实上,它并不比这复杂多少

最初的想法是导出一个globals“模块”,就像导出一个CommonJS模块一样(例如,have AngularJS export
window.angular
),但因为它包含包装器,所以应该这样做

有关说明,请参阅自述。如果有问题的脚本实际上没有任何可以合理导出的内容,只需让它导出
window
(这将导致
module.exports=window['window']
)或一个不存在的任意名称(导致
未定义


如果您想在自己的browserify代码中访问
窗口
对象,还可以查看模块,它提供了一个很好的包装器,可以在CommonJS模块中安全地访问浏览器全局文件。

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

咖啡脚本 JavaScript
编写转换:

当browserify捆绑模块时,该是否与全局对象不对应?在这种特殊情况下,否。我不确定原因(或规范是什么)。如果您想试一试,这里是实际的文件:-
通常不涉及全局范围
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);
};