将 `require()` 与 `node --eval` 一起使用
Posted
技术标签:
【中文标题】将 `require()` 与 `node --eval` 一起使用【英文标题】:Use `require()` with `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 上。
【问题讨论】:
【参考方案1】:不,至少在2.x
中没有。
通过查看2.6
的source:
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 代码就像一个常规模块一样工作。
【讨论】:
以上是关于将 `require()` 与 `node --eval` 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法取消 node.js 对 require 模块的缓存
ReactNative:Running ‘[node, -e, console.log(require(‘react-native/cli’).bin);]’ command failed.
ReactNative:Running ‘[node, -e, console.log(require(‘react-native/cli’).bin);]’ command failed.