Client sur le nœud: Uncaught ReferenceError: besoin n'est pas défini
Donc, je suis à l'écriture d'une application avec le node/express + jade combo.
J'ai client.js
, qui est chargé sur le client. Dans ce fichier j'ai le code qui appelle les fonctions à partir d'autres fichiers JavaScript. Mon but était d'utiliser
var m = require('./messages');
afin de charger le contenu de messages.js
(tout comme je le fais sur le côté serveur) et, plus tard, sur l'appel des fonctions de ce fichier. Cependant, require
n'est pas défini sur le côté client, et il déclenche une erreur de la forme Uncaught ReferenceError: require is not defined
.
Ces autres fichiers JS sont également chargés de l'exécution sur le client, car je place les liens à l'en-tête de la page web. Ainsi, le client sait toutes les fonctions qui sont exportées à partir de ces autres fichiers.
Comment dois-je appeler ces fonctions à partir de ces autres fichiers JS (comme messages.js
) dans les principales client.js
fichier qui ouvre la socket vers le serveur?
- Pourquoi ne pas simplement
<script src="messages.js"></script>
et de les appeler pour la suite? - Peut-être cela peut être une solution, mais il y a autre chose qui me préoccupe. J'ai aussi un fichier appelé "representation.js" pour l'abstraction de la représentation, qui est commun pour le client et le serveur. Dans ce fichier j'ai aussi exiger des déclarations et du côté serveur, il devrait être ok parce que je suis en cours d'exécution nœud. Cependant, sur le côté client, ce sera un problème. Qu'en pensez-vous?
- Pour les débutants comme moi (qui ne pouvait pas même sort "mnp" il y a une semaine! :-), il peut être utile de comprendre que les browserify de
--require
option causesrequire()
être défini sur le côté client. Voir: lincolnloop.com/blog/speedy-browserifying-multiple-bundles - Archer... Si il y a 100 fichiers... nous ne pouvons pas continuer sur le chargement de la, dans le HTML.........
Vous devez vous connecter pour publier un commentaire.
C'est parce que
require()
n'existe pas dans le navigateur/JavaScript côté client.Maintenant, vous allez devoir faire des choix au sujet de votre côté client JavaScript script de gestion.
Vous disposez de trois options:
<script>
tag.CommonJS côté client-implémentations comprennent:
(la plupart d'entre eux nécessitent une étape de génération avant de déployer)
Vous pouvez lire plus au sujet de ma comparaison de Browserify vs (obsolète) Composant.
AMD implémentations comprennent:
Note, dans votre recherche de choisir d'aller avec, vous pourrez lire sur Bower. Bower est seulement pour les dépendances de package et est unopinionated sur le module de telles définitions CommonJS et AMD.
Espère que cela aide certains.
karma-browserify
et la nécessite fonctionne?<script>
balise pour importer une Réagir la classe sans l'utilisation d'un nodeJs gestionnaire de paquets?ES6: En html comprennent les principaux js fichier à l'aide de l'attribut
type="module"
(prise en charge du navigateur):Et dans
script.js
fichier inclure un autre fichier comme ça:Dans 'module.js' vous devez la fonction d'exportation/classe que vous allez importer
De travail exemple ici.
val
à la fenêtre de l'objetwindow.val = val
. Voici plunker: Plunker: plnkr.co/modifier/aDyjyMxO1PdNaFh7ctBT?p=preview - cette solution fonctionneJe suis venue à partir d'un électron de l'environnement, où j'ai besoin de l'IPC de la communication entre un moteur de rendu processus et le processus principal. Le moteur de rendu processus se trouve dans un fichier HTML entre les balises script et génère la même erreur.
La ligne
jette le Uncaught ReferenceError: besoin n'est pas défini
J'ai été en mesure de contourner ce problème en précisant nœud d'intégration vrai lorsque la fenêtre du navigateur (où ce fichier HTML est intégré) a été créé à l'origine dans le processus principal.
Qui a résolu le problème pour moi.
La solution a été proposée ici.
Espérant que cela aide quelqu'un d'autre.
Des acclamations.
Dans mon cas, j'ai utilisé une autre solution.
Que le projet ne nécessite pas de CommonJs et il doit avoir ES3 compatibilité des modules non pris en charge) tous vous avez besoin est juste supprimer tous les exportation et importation consolidés à partir de votre code, parce que votre tsconfig ne contient pas de
Mais l'utilisation d'importation et d'exportation des états dans vos fichiers référencés
Final code généré aura toujours(au moins pour le tapuscrit 3.0) ces lignes
Même en utilisant cela ne fonctionne pas , je pense que la meilleure solution est de browserify: