Digamos que tengo un archivo llamado app.js. Bastante simple:
var express = require('express');
var app = express.createServer();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('/', function(req, res){
res.render('index', {locals: {
title: 'NowJS + Express Example'
}});
});
app.listen(8080);
¿Qué pasa si tengo funciones dentro de "tools.js"? ¿Cómo los importaría para usar en apps.js?
O ... ¿se supone que debo convertir las "herramientas" en un módulo y luego requerirlo? << parece difícil, prefiero hacer la importación básica del archivo tools.js.
javascript
import
header
node.js
TIMEX
fuente
fuente
require
crear una carpeta en el mismo directorio en Windows. Tienes que usar el direccionamiento de estilo Unix: en./mydir
lugar de simplemente viejomydir
.node_modules
carpeta externa . npmjs.com/package/node-import Espero que pueda ayudar. ¡Gracias!Respuestas:
Puede requerir cualquier archivo js, solo necesita declarar lo que desea exponer.
Y en su archivo de aplicación:
fuente
require("http://javascript-modules.googlecode.com/svn/functionChecker.js")
no parece importar el módulo correctamente. ¿Hay alguna otra forma de importar scripts externos?Si, a pesar de todas las otras respuestas, aún desea incluir tradicionalmente un archivo en un archivo fuente node.js, puede usar esto:
+''
es necesaria para obtener el contenido del archivo como una cadena y no como un objeto (también puede usarlo.toString()
si lo prefiere).include()
función de utilidad o algo así).Tenga en cuenta que, en la mayoría de los casos, esta es una mala práctica y, en su lugar, debe escribir un módulo . Sin embargo, hay situaciones raras, donde la contaminación de su contexto local / espacio de nombres es lo que realmente desea.
Actualizar 2015-08-06
Tenga en cuenta que esto no funcionará
"use strict";
(cuando esté en "modo estricto" ) porque el código que realiza la importación no puede acceder a las funciones y variables definidas en el archivo "importado" . El modo estricto impone algunas reglas definidas por las nuevas versiones del estándar de idioma. Esta puede ser otra razón para evitar la solución que se describe aquí.fuente
No necesita nuevas funciones ni nuevos módulos. Simplemente necesita ejecutar el módulo al que está llamando si no desea usar el espacio de nombres.
en tools.js
en app.js
o en cualquier otro .js como myController.js:
en vez de
var tools = require('tools.js')
que nos obligan a usar un espacio de nombres y herramientas de llamada comotools.sum(1,2);
simplemente podemos llamar
y entonces
en mi caso tengo un archivo con controladores ctrls.js
y puedo usar
Categories
en cada contexto como clase pública despuésrequire('ctrls.js')()
fuente
this
en una función es el alcance global cuando la función se llama directamente (no está vinculada de ninguna manera).require('blah.js')();
debe permítanme importarlos a todos en el mismo alcance !!! ¡¡¡Gracias!!!Crea dos archivos js
Archivo js principal
Salida de la consola
fuente
Aquí hay una explicación clara y simple:
Contenido de Server.js:
Contenido de Helpers.js:
fuente
También estaba buscando una función 'incluir' de NodeJS y verifiqué la solución propuesta por Udo G - vea el mensaje https://stackoverflow.com/a/8744519/2979590 . Su código no funciona con mis archivos JS incluidos. Finalmente resolví el problema así:
Claro, eso ayuda.
fuente
crear dos archivos, por ejemplo,
app.js
ytools.js
app.js
tools.js
salida
fuente
decir que quiere llamar a la función de ping () y añadir (30,20) que está en lib.js archivo desde main.js
main.js
lib.js
fuente
El módulo vm en Node.js proporciona la capacidad de ejecutar código JavaScript dentro del contexto actual (incluido el objeto global). Ver http://nodejs.org/docs/latest/api/vm.html#vm_vm_runinthiscontext_code_filename
Tenga en cuenta que, a partir de hoy, hay un error en el módulo vm que impide que runInThisContext haga lo correcto cuando se invoca desde un nuevo contexto. Esto solo importa si su programa principal ejecuta código dentro de un nuevo contexto y luego ese código llama a runInThisContext. Ver https://github.com/joyent/node/issues/898
Lamentablemente, el enfoque con (global) que Fernando sugirió no funciona para funciones con nombre como "function foo () {}"
En resumen, aquí hay una función include () que funciona para mí:
fuente
Udo G. dijo:
Tiene razón, pero hay una manera de afectar el alcance global de una función. Mejorando su ejemplo:
Espero que ayude.
fuente
Funcionó conmigo como lo siguiente ...
Lib1.js
ahora en el archivo Main.js necesita incluir Lib1.js
Recuerde colocar Lib1.js en la carpeta node_modules .
fuente
Puede poner sus funciones en variables globales, pero es una mejor práctica simplemente convertir su script de herramientas en un módulo. Realmente no es demasiado difícil: simplemente adjunte su API pública al
exports
objeto. Eche un vistazo al módulo de exportaciones de Node.js para obtener más detalles.fuente
Otra forma de hacer esto en mi opinión, es ejecutar todo en el archivo lib cuando llame a la función require () usando (function (/ * things here * /) {}) (); hacer esto hará que todas estas funciones tengan un alcance global, exactamente como la solución eval ()
src / lib.js
Y luego, en su código principal, puede llamar a sus funciones por su nombre como:
main.js
Hará esta salida
Preste atención a lo indefinido cuando llame a mi object.funcFour () , será lo mismo si carga con eval () . Espero eso ayude :)
fuente
Solo quiero agregar, en caso de que necesite ciertas funciones importadas de su tools.js , entonces puede usar una asignación de desestructuración que es compatible con node.js desde la versión 6.4 - vea node.green .
Ejemplo : (ambos archivos están en la misma carpeta)
salida:
true
Esto también evita que asigne esas funciones como propiedades de otro objeto como es el caso en la siguiente asignación (común):
const tools = require('./tools.js');
donde necesitas llamar
tools.isEven(10)
.NOTA:
No olvide ponerle el prefijo a su nombre de archivo con la ruta correcta; incluso si ambos archivos están en la misma carpeta, necesita un prefijo con
./
De Node.js docs :
fuente
app.js
tools.js
fuente
Incluir archivo y ejecutarlo en un contexto dado (no global)
fileToInclude.js
main.js
fuente
Esta es la mejor manera que he creado hasta ahora.
Aún necesita informar lo que desea exportar
fuente
¿Como si tuvieras un archivo
abc.txt
y muchos más?Cree 2 archivos:
fileread.js
yfetchingfile.js
luegofileread.js
escriba este código:En
fetchingfile.js
escribir este código:Ahora, en una terminal: $ node fetchingfile.js --file = abc.txt
Está pasando el nombre del archivo como argumento, además, incluya todos los archivos en
readfile.js
lugar de pasarlo.Gracias
fuente
Puedes simplemente simple
require('./filename')
.P.ej.
Tenga en cuenta que:
fuente
También estaba buscando una opción para incluir código sin escribir módulos, resp. use las mismas fuentes independientes probadas de un proyecto diferente para un servicio Node.js, y la respuesta de jmparatte lo hizo por mí.
El beneficio es que no contaminas el espacio de nombres, no tengo problemas
"use strict";
y funciona bien.Aquí una muestra completa :
Script para cargar - /lib/foo.js
SampleModule - index.js
Espero que esto haya sido útil de alguna manera.
fuente
Otro método cuando se utiliza el framework node.js y express.js
almacenar esto en un archivo js llamado sy en la carpeta estática
Ahora para usar la función
fuente
Se me ocurrió un método bastante burdo de manejar esto para la plantilla HTML. Similar a PHP
<?php include("navigation.html"); ?>
fuente
Si desea aprovechar la arquitectura de múltiples CPU y microservicios, para acelerar las cosas ... Use RPC sobre procesos bifurcados.
Suena complejo, pero es simple si usas pulpo .
Aquí hay un ejemplo:
en tools.js agregar:
en app.js, agregue:
divulgación: soy el autor de Octopus, y lo construí para un caso similar mío, ya que no pude encontrar ninguna biblioteca ligera.
fuente
Para convertir las "herramientas" en un módulo, no veo nada difícil. A pesar de todas las otras respuestas, todavía recomendaría el uso de module.exports:
Ahora necesitamos asignar estas exportaciones al alcance global (en su aplicación | index | server.js)
Ahora puede referirse y llamar a la función como:
fuente
Utilizar:
app.js:
fuente
./tools.js