primer lugar, debe considerar si sería suficiente para poner en práctica su aplicación como un módulo C++ para el nodo y luego pegar la parte principal como un script Nodo.
De lo contrario puede que desee "re-implementar nodo", tomando el código del núcleo como el ejemplo y eliminar las partes que no es necesario (por ejemplo, el módulo HTTP) y luego poner sus componentes en ella . La forma menos dolorosa sería hacer una fusión de subárbol y desmantelar el sistema de compilación, y luego agregar prefijos en los guiones de compilación para apuntar al directorio donde vive. Entonces puede evitar que se creen ciertas partes. Sin embargo, el sistema de compilación de Node contiene varias partes y puede ser un trabajo bastante difícil de hacer.
También puede intentar volver a empaquetar el nodo con sus cosas cargadas por defecto y cambiando el nombre del ejecutable. Sin embargo, esto es sólo una forma más compleja de tomar el primer enfoque que he descrito, sólo puede instalar un script en /usr/bin/
que irá como:
#!/usr/bin/node
var myAppMain = require('libmyApp');
myAppMain.withConfig(filename,
function(err, cnf) {
if (err) throw err; // parser or file access error
cnf.evalMe();
});
Se puede utilizar un JSLint como su analizador, a continuación, grep para llamadas peligrosas y luego o simplemente use require(config.js)
, aunque deberá agregar exports.someMethod = function (...) {...}
. Pero require()
es mucho más seguro en general, sin embargo, es posible que desee implementar un preprocesador para su configuración que sustituirá exports.someMethod = function (...) {...}
en lugar de sus funciones y anexará require('OnlyCallMySafeMethods')
y rechazará intentos de require('fs')
u otra lib que tenga miedo de dejar alguien a quien usar Este tipo de seguridad es solo una cosa opcional que puede desear tener, todo depende de usted. Aunque supongo que es posible que desee hacer algo con la sustitución exports.someMethod = ....
y tener uno require('myAppConfigLib)
agregado en la parte superior para que el usuario simplemente use su API más cualquier cosa que deseen poner en su secuencia de comandos/configuración!
ACTUALIZACIÓN: No es un comentario bastante útil en line 66 de src/node.js
:
// To allow people to extend Node in different ways, this hook allows
// one to drop a file lib/_third_party_main.js into the build
// directory which will be executed instead of Node's normal loading.
Tenga en cuenta también que el contenido de src/
están siendo compilados a código de bytes en tiempo de compilación.
node.js es realmente V8 incrustado en un servidor web. Dado que su aplicación probablemente no es un servidor web, simplemente puede incrustar V8 (o cualquier otro motor de JavaScript) en él. – MAK
Técnicamente node.js no solo hace servidores web. Puede cumplir toneladas de roles diferentes, pero es realmente bueno para los servidores HTTP (servidores de archivos, servidores web, etc.). En cualquier caso, tienes razón acerca de usar V8 en su lugar. – tjameson
@MAK node.js no es un servidor web. Integra un módulo de servidor web, pero ciertamente no es un servidor web. En las aplicaciones de C++, node.js trae una gran cantidad de módulos que no están disponibles solo con v8. – Coyote