2011-01-03 10 views
3

Wenn ich die neue Unterstützung von node.js für --eval verwende, erhalte ich einen Fehler (ReferenceError: require is not defined), wenn ich versuche, require() zu verwenden.Verwenden Sie `require()` mit `node --eval`

Hier ist ein Beispiel für das Scheitern:

$ 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 
$ 

Hier ist ein funktionierendes Beispiel require() der Verwendung von in die REPL getippt:

$ 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] 
} 
> 

Gibt es eine Möglichkeit --evalrequire() mit Knotens zu benutzen?

Ich bin auf Knoten 0.2.6 auf Mac OS X 10.6.5.

Antwort

3

Nein, zumindest nicht in 2.x.

Mit Blick auf dem source von 2.6:

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

Es wird deutlich, dass Node.js nicht Setup ein Wrapper-Code für den eval'd Code daher require usw. sind nicht verfügbar.

Aber das war changed in der 3.x Version:

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

So in 3.x eval'd Code funktioniert genau wie ein reguläres Modul.

Verwandte Themen