当 .call(this) 来自 commonJS 模块时,如何使它成为 window
How do I make this window when .call(this) from a commonJS module
我正在使用 Webpack 打包我的依赖项我正在尝试加载方法组合器。依赖关系看起来像这样...
// Generated by CoffeeScript 1.3.1
(function() {
var __slice = [].slice;
this.before = function(decoration) {
return function(base) {
return function() {
decoration.apply(this, arguments);
return base.apply(this, arguments);
};
};
};
...
}).call(this);
然后我在我的 TS 文件中包含...
require("method-combinators/lib/method-combinators.js");
当我在内部函数上设置断点时,我注意到 this != window
。如果我尝试添加...
require.bind(window);
我明白了
Critical dependencies: 20:0-7 require function is used in a way in
which dependencies cannot be statically extracted
正确的做法是什么?
更新
> this
Object {}
> window
Window {...}
如果我这样做
window['comb'] = require("method-combinators/lib/method-combinators.js");
它似乎有效,但因为这是遗留代码,所以很难搜索 after 和 begin 的所有实例。
更新 2
这有点管用...
var comb = require("method-combinators/lib/method-combinators.js");
window['after'] = comb.after;
window['before'] = comb.before;
这与@tcooc 提供的答案类似,但问题是我必须列出每个函数。对于下划线,我有这样的东西...
var s = require("underscore.string");
window['_'].mixin(s.exports());
但是这里的问题是梳子没有exports
更新 3
这是我的决赛
var comb = require("method-combinators/lib/method-combinators.js");
window['_'].extend(window, comb);
commonjs 模块,按照设计,不访问或修改全局范围(或者至少不应该)。您代码中的 this
变量引用的是从该模块导出的值,而不是 window
。该代码实际上包装在类似的东西中(针对您的用例进行了简化):
// you want to load "method-combinator.js"
require('method-combinator.js');
// load "method-combinator.js" as "dependency()"
var exports = {};
dependency.call(exports);
现在,每当您尝试加载 "method-combinator.js" 时,都会返回 exports
。
依赖的正确使用方法是:
var combinators = require('method-combinator.js');
如果您希望将 combinators
的所有值添加到 window
,假设您有下划线:
_.extend(window, combinators);
// or if _ is somehow not resolving properly (for some reason?)
window._.extend(window, combinators);
我正在使用 Webpack 打包我的依赖项我正在尝试加载方法组合器。依赖关系看起来像这样...
// Generated by CoffeeScript 1.3.1
(function() {
var __slice = [].slice;
this.before = function(decoration) {
return function(base) {
return function() {
decoration.apply(this, arguments);
return base.apply(this, arguments);
};
};
};
...
}).call(this);
然后我在我的 TS 文件中包含...
require("method-combinators/lib/method-combinators.js");
当我在内部函数上设置断点时,我注意到 this != window
。如果我尝试添加...
require.bind(window);
我明白了
Critical dependencies: 20:0-7 require function is used in a way in which dependencies cannot be statically extracted
正确的做法是什么?
更新
> this
Object {}
> window
Window {...}
如果我这样做
window['comb'] = require("method-combinators/lib/method-combinators.js");
它似乎有效,但因为这是遗留代码,所以很难搜索 after 和 begin 的所有实例。
更新 2
这有点管用...
var comb = require("method-combinators/lib/method-combinators.js");
window['after'] = comb.after;
window['before'] = comb.before;
这与@tcooc 提供的答案类似,但问题是我必须列出每个函数。对于下划线,我有这样的东西...
var s = require("underscore.string");
window['_'].mixin(s.exports());
但是这里的问题是梳子没有exports
更新 3
这是我的决赛
var comb = require("method-combinators/lib/method-combinators.js");
window['_'].extend(window, comb);
commonjs 模块,按照设计,不访问或修改全局范围(或者至少不应该)。您代码中的 this
变量引用的是从该模块导出的值,而不是 window
。该代码实际上包装在类似的东西中(针对您的用例进行了简化):
// you want to load "method-combinator.js"
require('method-combinator.js');
// load "method-combinator.js" as "dependency()"
var exports = {};
dependency.call(exports);
现在,每当您尝试加载 "method-combinator.js" 时,都会返回 exports
。
依赖的正确使用方法是:
var combinators = require('method-combinator.js');
如果您希望将 combinators
的所有值添加到 window
,假设您有下划线:
_.extend(window, combinators);
// or if _ is somehow not resolving properly (for some reason?)
window._.extend(window, combinators);