【问题标题】:Use `require()` with `node --eval`将 `require()` 与 `node --eval` 一起使用
【发布时间】:2011-06-02 17:27:22
【问题描述】:

在使用 node.js 对 --eval 的新支持时,当我尝试使用 require() 时出现错误 (ReferenceError: require is not defined)。

这是一个失败的例子:

$ node --eval 'require("http");'

undefined:1

^
ReferenceError: require is not defined
    at eval at <anonymous> (node.js:762:36)
    at eval (native)
    at node.js:762:36
$

这是一个使用输入到 REPL 中的 require() 的工作示例:

$ node
> require("http");
{ STATUS_CODES: 
   { '100': 'Continue'
   , '101': 'Switching Protocols'
   , '102': 'Processing'
   , '200': 'OK'
   , '201': 'Created'
   , '202': 'Accepted'
   , '203': 'Non-Authoritative Information'
   , '204': 'No Content'
   , '205': 'Reset Content'
   , '206': 'Partial Content'
   , '207': 'Multi-Status'
   , '300': 'Multiple Choices'
   , '301': 'Moved Permanently'
   , '302': 'Moved Temporarily'
   , '303': 'See Other'
   , '304': 'Not Modified'
   , '305': 'Use Proxy'
   , '307': 'Temporary Redirect'
   , '400': 'Bad Request'
   , '401': 'Unauthorized'
   , '402': 'Payment Required'
   , '403': 'Forbidden'
   , '404': 'Not Found'
   , '405': 'Method Not Allowed'
   , '406': 'Not Acceptable'
   , '407': 'Proxy Authentication Required'
   , '408': 'Request Time-out'
   , '409': 'Conflict'
   , '410': 'Gone'
   , '411': 'Length Required'
   , '412': 'Precondition Failed'
   , '413': 'Request Entity Too Large'
   , '414': 'Request-URI Too Large'
   , '415': 'Unsupported Media Type'
   , '416': 'Requested Range Not Satisfiable'
   , '417': 'Expectation Failed'
   , '418': 'I\'m a teapot'
   , '422': 'Unprocessable Entity'
   , '423': 'Locked'
   , '424': 'Failed Dependency'
   , '425': 'Unordered Collection'
   , '426': 'Upgrade Required'
   , '500': 'Internal Server Error'
   , '501': 'Not Implemented'
   , '502': 'Bad Gateway'
   , '503': 'Service Unavailable'
   , '504': 'Gateway Time-out'
   , '505': 'HTTP Version not supported'
   , '506': 'Variant Also Negotiates'
   , '507': 'Insufficient Storage'
   , '509': 'Bandwidth Limit Exceeded'
   , '510': 'Not Extended'
   }
, IncomingMessage: { [Function: IncomingMessage] super_: [Function: EventEmitter] }
, OutgoingMessage: { [Function: OutgoingMessage] super_: [Function: EventEmitter] }
, ServerResponse: { [Function: ServerResponse] super_: [Circular] }
, ClientRequest: { [Function: ClientRequest] super_: [Circular] }
, Server: 
   { [Function: Server]
     super_: { [Function: Server] super_: [Function: EventEmitter] } }
, createServer: [Function]
, Client: 
   { [Function: Client]
     super_: { [Function: Stream] super_: [Function: EventEmitter] } }
, createClient: [Function]
, cat: [Function]
}
> 

有没有办法将require() 与节点的--eval 一起使用?

我在 Mac OS X 10.6.5 上的节点 0.2.6 上。

【问题讨论】:

    标签: node.js


    【解决方案1】:

    不,至少在2.x 中没有。

    通过查看2.6source

    } else if (process._eval) {
      // -e, --eval
      var indirectEval= eval; // so the eval happens in global scope.
      if (process._eval) console.log(indirectEval(process._eval));
    

    很明显,Node.js 没有为 eval 代码设置任何包装器代码,因此 require 等不可用。

    但这是3.x 版本中的changed

    } else if (process._eval) {
      // -e, --eval
      var rv = new module.Module()._compile('return eval(process._eval)', 'eval');
      console.log(rv);
    

    所以在3.x eval'd 代码就像一个常规模块一样工作。

    【讨论】:

      猜你喜欢
      • 2016-09-17
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多