2015-05-09 17 views
5

ho due file test.js e x.js, nella stessa directory:In Node, come si richiedono i file all'interno di eval?

  • test.js:

    console.log(eval("require('x.js')")); 
    
  • x.js è vuoto.

Previsto: require rendimenti undefined, quindi nulla viene registrato.

Actual: node test.js mi dà Error: Cannot find module 'x.js' (stack-trace omesse per brevità).

La situazione suoni simili a this other question, con le differenze che ho usato eval piuttosto che new Function, e requireè definita, solo lavorando in modo imprevisto.


Perché è questo?

Come faccio a correggere correttamente require un modulo nel codice eval?

+2

Obbligatorio "inb4 eval is evil": I * do * have Very Good Reasons ™ -Io sto scrivendo un sistema macro lisp che ha bisogno del compilatore in fase di esecuzione. – Anko

risposta

8

Per require() un file/modulo locale, il percorso dovrebbe start with . (same directory) or .. (parent directory):

console.log(eval("require('./x.js')")); 

Senza uno di questi, il nodo sembra per x.js di essere un core module o contained in a node_modules directory.


A meno eval viene fatto riferimento indirettamente:

var e = eval;   // global eval 
e("require('./x.js')"); // ReferenceError: require is not defined 

Si dovrebbe valutare la stringa nel campo di applicazione corrente ed essere in grado di fare riferimento a require.

+1

\ * facepalm \ * Grazie e mi dispiace. – Anko

+3

non c'è bisogno di essere dispiaciuto. la tua domanda ora aiuterà tutti a commettere lo stesso errore in futuro :) – hugomg

Problemi correlati