El argumento de require(...)
en node.js es un nombre de archivo. Si tuviera un código fuente de módulo en una cadenacode
, ¿podría de alguna manera llamar al require(code)
y cargar funciones desde esa cadena?Requerir en nodejs
Respuesta
Un problema podría ser escribir el código fuente del módulo en un archivo temporal ./tmp-file.js
y luego require('./tmp-file')
, y luego eliminar el archivo.
Esto probablemente no sea óptimo porque tendría que bloquear y escribir el archivo de forma síncrona, o poner todo lo que requiera ese módulo en la devolución de llamada a la escritura asíncrona.
Un ejemplo de trabajo para el archivo de escritura asíncrona (gist - also includes sync file write):
var http = require('http');
var fs = require('fs');
var helloModuleString = "exports.world = function() { return 'Hello World\\n'; }";
fs.writeFile('./hello.js', helloModuleString, function (err) {
if (err) return console.log(err);
var hello = require('./hello');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(hello.world());
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
});
Resultados en:
$ curl 127.0.0.1:1337
> Hello World
Gracias, parece una buena solución de referencia. – Cartesius00
En general, estoy de acuerdo, pero eso requiere que la aplicación de nodos pueda crear un archivo en el sistema de archivos. Y si inicia varias instancias de la aplicación de nodo, debe decidir qué hacer con el archivo o el espacio de nombre de alguna manera. Traté de agregar una extensión personalizada, pero ahora está en desuso. ¿No hay otra buena solución? –
Pongo esto en una función para su reutilización. Crea un archivo en el directorio temporal del sistema operativo basado en un hash aleatorio, lo requiere y luego lo elimina.
var fs = require('fs'),
os = require('os'),
crypto = require('crypto');
function requireString(moduleString) {
var token = crypto.randomBytes(20).toString('hex'),
filename = os.tmpdir() + '/' + token + '.js',
requiredModule = false;
// write, require, delete
fs.writeFileSync(filename, moduleString);
requiredModule = require(filename);
fs.unlinkSync(filename);
return requiredModule;
}
entonces usted puede hacer:
var carString = "exports.start = function(){ console.log('start'); };",
car = requireString(carString);
console.log("Car:", car);
Esto es todavía más de una solución, pero más cómodo de usar, creo.
agradable, gracias – Cartesius00
- 1. nodejs Requerir clase con inicializadores
- 2. mejor manera de requerir varios módulos en NodeJS
- 3. ¿Hay alguna manera de "requerir" un archivo JS solo una vez en nodejs?
- 4. Reemplazando 'requerir' en Clojure?
- 5. requerir archivo como cadena
- 6. Requerir archivos múltiples
- 7. Curl equivalent en nodejs?
- 8. bifurcan en NodeJS
- 9. Nodejs en Nearlyfreespeech?
- 10. Couchdb en Nodejs
- 11. Solicitud HTTPS en NodeJS
- 12. cifrado en nodejs
- 13. SSL Error en nodejs
- 14. Diferencia entre "incluir" y "requerir" en php
- 15. ¿Cómo requerir un bloque en Ruby?
- 16. ¿Cuándo llamar a un "requerir" en Rails?
- 17. IIS 7 Deshabilitar "Requerir SSL"
- 18. mootools & nodejs
- 19. NodeJS Passport
- 20. Nodejs streaming
- 21. Cómo usar sugar.js en nodejs?
- 22. Modelos de concurrencia en nodejs
- 23. ¿Cómo emulo "dormir" en NodeJS?
- 24. nodejs con socket.io en heroku
- 25. Burlarse usando mocha en NodeJs
- 26. Crear cliente HTTPS en NodeJS
- 27. liste las particiones en nodejs
- 28. Crear una clase en NodeJS
- 29. Almacenamiento en memoria de Nodejs
- 30. ¿Es posible requerir PyQt desde setuptools setup.py?
http://nodejs.org/api/modules.html#modules_modules (qué uri ridículo) – jAndy
@jAndy ¿Dónde está el código fuente en una cadena? Solo veo cargar desde el archivo. – Cartesius00
http://nodejs.org/api/modules.html – Thomas