Donc, j'écris une application avec le combo node / express + jade.
J'ai client.js
, qui est chargé sur le client. Dans ce fichier, j'ai du code qui appelle des fonctions d'autres fichiers JavaScript. Ma tentative était d'utiliser
var m = require('./messages');
afin de charger le contenu de messages.js
(comme je le fais du côté serveur) et plus tard les fonctions d'appel à partir de ce fichier. Cependant, require
n'est pas défini du côté client, et il génère une erreur de formulaire Uncaught ReferenceError: require is not defined
.
Ces autres fichiers JS sont également chargés lors de l'exécution sur le client, car je place les liens dans l'en-tête de la page Web. Le client connaît donc toutes les fonctions qui sont exportées à partir de ces autres fichiers.
Comment puis-je appeler ces fonctions à partir de ces autres fichiers JS (tels que messages.js
) dans le client.js
fichier principal qui ouvre le socket au serveur?
<script src="messages.js"></script>
après ça?--require
option de browserifyrequire()
doit être définie côté client. Voir: lincolnloop.com/blog/speedy-browserifying-multiple-bundlesRéponses:
En effet,
require()
n'existe pas dans le JavaScript côté navigateur / client.Vous allez maintenant devoir faire des choix concernant la gestion de vos scripts JavaScript côté client.
Vous avez trois options:
<script>
balise.Les implémentations côté client CommonJS incluent:
(la plupart d'entre eux nécessitent une étape de génération avant le déploiement)
Vous pouvez en savoir plus sur ma comparaison du composant Browserify vs (obsolète) .
Les implémentations AMD incluent:
Notez que dans votre recherche pour choisir lequel choisir, vous en apprendrez plus sur Bower . Bower est uniquement pour les dépendances de package et n'est pas d'avis sur les définitions de module comme CommonJS et AMD.
J'espère que cela aide certains.
la source
<script>
balise pour importer une classe React sans utiliser de gestionnaire de packages nodeJs?Je viens d'un environnement électronique, où j'ai besoin d'une communication IPC entre un processus de rendu et le processus principal. Le processus de rendu se trouve dans un fichier HTML entre les balises de script et génère la même erreur. La ligne
jette le UnCaught ReferenceError: require n'est pas défini
J'ai pu contourner cela en spécifiant l'intégration du nœud comme vraie lorsque la fenêtre du navigateur (où ce fichier HTML est incorporé) a été créée à l'origine dans le processus principal.
Cela a résolu le problème pour moi. La solution a été proposée ici . Espère que cela aide quelqu'un d'autre. À votre santé.
la source
ES6: en html, incluez le fichier js principal en utilisant l'attribut
type="module"
( prise en charge du navigateur ):Et dans le
script.js
fichier, inclure un autre fichier comme celui-ci:Dans le fichier inclus (
module.js
), vous devez exporter la fonction / classe que vous importerezExemple de travail ici .
la source
val
à l'objet fenêtrewindow.val = val
. Voici plunker: Plunker: plnkr.co/edit/aDyjyMxO1PdNaFh7ctBT?p=preview - cette solution fonctionneDans mon cas, j'ai utilisé une autre solution.
Comme le projet ne nécessite pas de CommonJs et qu'il doit être compatible avec ES3 (modules non pris en charge), il vous suffit de supprimer toutes les instructions d' exportation et d' importation de votre code , car votre tsconfig ne contient pas
Mais utilisez les instructions d'importation et d'exportation dans vos fichiers référencés
Le code généré final aura toujours (au moins pour dactylographié 3.0) de telles lignes
la source
Même en utilisant cela ne fonctionnera pas, je pense que la meilleure solution est la navigation par navigateur:
la source
Cela a fonctionné pour moi
<script data-main="your-Scrpt.js" src="require.js"></script>
note!
utilisez: -> require (['moudle-name']) dans "your-script.js"
pas besoin ('moudle-name')const {ipcRenderer} = require (['electron'])
Pas: const {ipcRenderer} = require ('electron')
la source