Disons que j'ai un fichier appelé app.js. Assez 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);
Et si j'ai des fonctions dans "tools.js". Comment les importer pour les utiliser dans apps.js?
Ou ... suis-je censé transformer des "outils" en module, puis en avoir besoin? << semble difficile, je fais plutôt l'import basique du fichier tools.js.
javascript
import
header
node.js
TIMEX
la source
la source
require
un dossier dans le même répertoire sous Windows. Vous devez utiliser l'adressage de style Unix:./mydir
au lieu de l'ancien simplemydir
.node_modules
dossier extérieur . npmjs.com/package/node-import J'espère que cela peut vous aider. Merci!Réponses:
Vous pouvez exiger n'importe quel fichier js, il vous suffit de déclarer ce que vous souhaitez exposer.
Et dans votre fichier d'application:
la source
require("http://javascript-modules.googlecode.com/svn/functionChecker.js")
ne semble pas importer correctement le module. Existe-t-il un autre moyen d'importer des scripts externes?Si, malgré toutes les autres réponses, vous souhaitez toujours inclure un fichier dans un fichier source node.js, vous pouvez utiliser ceci:
+''
est nécessaire pour obtenir le contenu du fichier sous forme de chaîne et non d'objet (vous pouvez également l'utiliser.toString()
si vous préférez).include()
fonction utilitaire ou quelque chose comme ça).Veuillez noter que dans la plupart des cas, il s'agit d'une mauvaise pratique et que vous devriez plutôt écrire un module . Cependant, il existe des situations rares, où la pollution de votre contexte / espace de noms local est ce que vous voulez vraiment.
Mise à jour 2015-08-06
Veuillez également noter que cela ne fonctionnera pas avec
"use strict";
(lorsque vous êtes en "mode strict" ) car les fonctions et les variables définies dans le fichier "importé" ne sont pas accessibles par le code qui effectue l'importation. Le mode strict applique certaines règles définies par les nouvelles versions de la norme de langue. Cela peut être une autre raison d' éviter la solution décrite ici.la source
Vous n'avez pas besoin de nouvelles fonctions ni de nouveaux modules. Vous devez simplement exécuter le module que vous appelez si vous ne souhaitez pas utiliser l'espace de noms.
dans tools.js
dans app.js
ou dans tout autre .js comme myController.js:
au lieu de
var tools = require('tools.js')
ce qui nous oblige à utiliser un espace de noms et à appeler des outils commetools.sum(1,2);
on peut simplement appeler
et alors
dans mon cas, j'ai un fichier avec les contrôleurs ctrls.js
et je peux utiliser
Categories
dans tous les contextes comme classe publique aprèsrequire('ctrls.js')()
la source
this
dans une fonction est la portée globale lorsque la fonction est appelée directement (non liée en aucune façon).require('blah.js')();
devrait permettez-moi de les importer tous dans la même portée !!! Merci!!!Créez deux fichiers js
Fichier js principal
Sortie console
la source
Voici une explication claire et simple:
Contenu Server.js:
Contenu Helpers.js:
la source
Je cherchais également une fonction «include» de NodeJS et j'ai vérifié la solution proposée par Udo G - voir le message https://stackoverflow.com/a/8744519/2979590 . Son code ne fonctionne pas avec mes fichiers JS inclus. Enfin, j'ai résolu le problème comme ça:
Bien sûr, cela aide.
la source
créer deux fichiers par exemple
app.js
ettools.js
app.js
tools.js
production
la source
dire que nous veut appeler la fonction ping () et ajouter (30,20) qui est dans lib.js fichier de main.js
main.js
lib.js
la source
Le module vm dans Node.js offre la possibilité d'exécuter du code JavaScript dans le contexte actuel (y compris l'objet global). Voir http://nodejs.org/docs/latest/api/vm.html#vm_vm_runinthiscontext_code_filename
Notez qu'à partir d'aujourd'hui, il y a un bogue dans le module vm qui empêche runInThisContext de faire le bien lorsqu'il est appelé à partir d'un nouveau contexte. Cela n'a d'importance que si votre programme principal exécute du code dans un nouveau contexte et que ce code appelle runInThisContext. Voir https://github.com/joyent/node/issues/898
Malheureusement, l'approche with (globale) suggérée par Fernando ne fonctionne pas pour les fonctions nommées comme "function foo () {}"
En bref, voici une fonction include () qui fonctionne pour moi:
la source
Udo G. a déclaré:
Il a raison, mais il existe un moyen d'affecter la portée globale d'une fonction. Améliorant son exemple:
J'espère que cela pourra aider.
la source
Cela a fonctionné avec moi comme suit ...
Lib1.js
maintenant dans le fichier Main.js , vous devez inclure Lib1.js
N'oubliez pas de placer Lib1.js dans le dossier node_modules .
la source
Vous pouvez placer vos fonctions dans des variables globales, mais il est préférable de simplement transformer votre script d'outils en module. Ce n'est vraiment pas trop difficile - attachez simplement votre API publique à l'
exports
objet. Jetez un œil au module Comprendre les exportations de Node.js pour plus de détails.la source
À mon avis, une autre façon de faire est d'exécuter tout dans le fichier lib lorsque vous appelez la fonction require () en utilisant (function (/ * choses ici * /) {}) (); faire cela rendra toutes ces fonctions globales, exactement comme le eval () solution
src / lib.js
Et puis dans votre code principal, vous pouvez appeler vos fonctions par leur nom comme:
main.js
Fera cette sortie
Faites attention à l' indéfini lorsque vous appelez my object.funcFour () , il en sera de même si vous chargez avec eval () . J'espère que cela aide :)
la source
Je veux juste ajouter, au cas où vous auriez besoin de certaines fonctions importées de vos tools.js , alors vous pouvez utiliser une affectation de déstructuration qui est prise en charge dans node.js depuis la version 6.4 - voir node.green .
Exemple : (les deux fichiers sont dans le même dossier)
production:
true
Cela évite également que vous affectiez ces fonctions en tant que propriétés d'un autre objet, comme c'est le cas dans l'affectation (courante) suivante:
const tools = require('./tools.js');
où vous devez appeler
tools.isEven(10)
.REMARQUE:
N'oubliez pas de préfixer votre nom de fichier avec le chemin correct - même si les deux fichiers se trouvent dans le même dossier, vous devez préfixer avec
./
Depuis les documents Node.js :
la source
app.js
tools.js
la source
Inclure le fichier et l'exécuter dans un contexte donné (non global)
fileToInclude.js
main.js
la source
C'est la meilleure façon que j'ai créée jusqu'à présent.
Vous devez toujours indiquer ce que vous souhaitez exporter
la source
Comme si vous aviez un fichier
abc.txt
et bien d'autres?Créer 2 fichiers:
fileread.js
etfetchingfile.js
, puis enfileread.js
écrire ce code:En
fetchingfile.js
écrivant ce code:Maintenant, dans un terminal: $ node fetchingfile.js --file = abc.txt
Vous passez le nom de fichier comme argument, en plus incluez tous les fichiers au
readfile.js
lieu de le passer.Merci
la source
Vous pouvez simplement simplement
require('./filename')
.Par exemple.
Veuillez noter que:
la source
Je cherchais également une option pour inclure du code sans écrire de modules, resp. utiliser les mêmes sources autonomes testées d'un autre projet pour un service Node.js - et la réponse de jmparatte l'a fait pour moi.
L'avantage est que vous ne polluez pas l'espace de noms, je n'ai aucun problème avec
"use strict";
et cela fonctionne bien.Voici un échantillon complet :
Script à charger - /lib/foo.js
SampleModule - index.js
J'espère que cela a été utile en quelque sorte.
la source
Une autre méthode lors de l'utilisation de framework node.js et express.js
stocker cela dans un fichier js nommé s et dans le dossier statique
Maintenant, pour utiliser la fonction
la source
J'ai trouvé une méthode assez grossière pour gérer cela pour les modèles HTML. Similairement à PHP
<?php include("navigation.html"); ?>
la source
Si vous souhaitez profiter de plusieurs processeurs et d'une architecture de microservices, pour accélérer les choses ... Utilisez des RPC sur des processus fourchus.
Cela semble complexe, mais c'est simple si vous utilisez la pieuvre .
Voici un exemple:
sur tools.js ajouter:
sur app.js, ajoutez:
divulgation - Je suis l'auteur de poulpe, et construit si pour une utilisation similaire, car je n'ai trouvé aucune bibliothèque légère.
la source
Pour transformer des "outils" en module, je ne vois pas du tout difficile. Malgré toutes les autres réponses, je recommanderais toujours l'utilisation de module.exports:
Nous devons maintenant affecter ces exportations à la portée globale (dans votre application | index | server.js)
Vous pouvez maintenant faire référence et appeler la fonction comme:
la source
Utilisation:
app.js:
la source
./tools.js