首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么nodejs的require不能使用调试器控制台在这个闭包中访问?可能的v8优化?

为什么nodejs的require不能使用调试器控制台在这个闭包中访问?可能的v8优化?
EN

Stack Overflow用户
提问于 2015-02-08 06:46:19
回答 1查看 184关注 0票数 0

以下是节点检查器中复制的代码。我尝试在调试器控制台中使用require来获取一些用于调试的模块,但是它没有被定义。有人能给我解释一下为什么会这样吗?

代码语言:javascript
复制
(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优化正在进行?

EN

回答 1

Stack Overflow用户

发布于 2019-01-02 21:32:03

根据我提供的有限信息,我正在冒险猜测。

您定义了一个IIFE,但没有调用它。你必须调用生命来执行它。

代码语言:javascript
复制
(function())()

还必须在调用时传递依赖项(参数)。

为清晰起见,示例(使用节点REPL):

代码语言:javascript
复制
> (function(a) { return a  } )
[Function]
> (function(a) { return a  } )(5) // call with value of argument "a"
5

在您的情况下,它将看起来像

代码语言:javascript
复制
;(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

我希望这能帮到你。干杯!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28388369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档