以下是节点检查器中复制的代码。我尝试在调试器控制台中使用require来获取一些用于调试的模块,但是它没有被定义。有人能给我解释一下为什么会这样吗?
(function (exports, require, module, __filename, __dirname) { 'use strict';
var cheerio = require('cheerio');
var request = require('request-promise');
var Q = require('q');
module.exports = {
compile: function compile(options){
//require is no longer available at this point
return {
getData: function getData(callback){
request(options.uri)
.then(function(response){
//here I need require
var $ = cheerio.load(response);
var result = $(options.selector).text().trim();
callback(undefined, result);
})
.catch(function(error){
callback(error);
});
}
};
}
};
});更新:进一步的调查表明,如果我在指定的行上实际添加了类似"var fs = require('fs')“的内容,而不是尝试在node-debugger控制台中调用它-它就能工作。有没有可能有一些我不知道的v8优化正在进行?
发布于 2019-01-02 21:32:03
根据我提供的有限信息,我正在冒险猜测。
您定义了一个IIFE,但没有调用它。你必须调用生命来执行它。
(function())()还必须在调用时传递依赖项(参数)。
为清晰起见,示例(使用节点REPL):
> (function(a) { return a } )
[Function]
> (function(a) { return a } )(5) // call with value of argument "a"
5在您的情况下,它将看起来像
;(function(exports, require, module, __filename, __dirname) {
"use strict"
var cheerio = require("cheerio")
var request = require("request-promise")
var Q = require("q")
module.exports = {
compile: function compile(options) {
//require is no longer available at this point
return {
getData: function getData(callback) {
request(options.uri)
.then(function(response) {
//here I need require
var $ = cheerio.load(response)
var result = $(options.selector)
.text()
.trim()
callback(undefined, result)
})
.catch(function(error) {
callback(error)
})
}
}
}
}
})(exports, require, module, __filename, __dirname) // pass arguments when calling IIFE我希望这能帮到你。干杯!
https://stackoverflow.com/questions/28388369
复制相似问题