Uncaught ReferenceError: require ist nicht definiert
Für ein Projekt, das ich arbeite, ich habe mit einem Sammelsurium von JavaScript-Bibliotheken. Die Hauptplatine meinem code ist aufgeteilt in mehrere commonjs-Module. Ich benutze google-Verschluss zu kombinieren, die Module in einer Ausgabe js-Datei, welche ich in meinem AngularJS-Anwendung.
Das problem ich habe versucht, führen Sie tests mit testacular. Gibt es Fehler, die ich erhalten, ist Uncaught ReferenceError: require is not defined
. Es geschieht, weil im Gegensatz zu google closure, testacular nicht verstehen, commonjs-Module. Es gibt ein paar Problemumgehungen Arbeit, die ich tun kann, aber ich hatte gehofft, es zu schaffen, ohne neu zu strukturieren meinem code.
- Ich kann restucture die Module so, dass ich mich nicht mehr mit commonjs. Ich weiß nicht, wie diese, weil es fühlt sich an wie ein Schritt rückwärts. Ich will, dass mein code modular.
- Ich kann testacular auf die kompilierte js von google-Verschluss. Ich bin nicht dagegen, es zu tun auf diese Weise, aber ich habe nicht in der Lage, um die trigger-alles funktioniert auf Datei-änderungen. Testacular kann wieder selbst laufen auf die Datei-änderungen, aber ich habe nicht gesehen, trotzdem machen google Schließung re-kompilieren, die auf Veränderungen.
- Endlich kann ich aktivieren commonjs-Modul in testacular. Im Idealfall ist dies der Weg, den ich gehen möchte, aber es ist vielleicht nicht die einfachste.
Hat sonst noch jemand ein ähnliches problem? Ich bin offen für den Versuch verschiedene Dinge; ich will nur nicht alles hacky.
javaclassstreamreader.spec.js:
"use strict"
var JavaClassStreamReader = require('../javaclassstreamreader.js').JavaClassStreamReader;
describe('javaclassstreamreader', function() {
it('reader can be constructed', function() {
var dataView = {
byteLength : 0
};
//FIXME load dataView
var reader = new JavaClassStreamReader(dataView);
expect(reader.dataView).toBe(dataView);
expect(reader.offset).toBe(0);
expect(reader.maxOffset).toBe(0);
});
});
javaclassstreamreader.js:
function JavaClassStreamReader(dataView, initialOffset, maxBytesToRead) {
this.dataView = dataView;
this.offset = initialOffset || 0;
this.maxOffset = this.offset + (maxBytesToRead || this.dataView.byteLength);
}
//... code trucated ...
Klingt wie eine Funktion mit dem Namen
require(...)
verwendet wird, die in Ihrem Skript und die Bibliothek-Datei wird nicht geladen, wo die require
Funktion definiert ist. Poste relevanten code.require()
ist Teil des commonjs-Spezifikation.InformationsquelleAutor pgreen2 | 2013-01-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, es ist/war ein Problem mit Testacular.
Könnte Sie Folgendes versuchen:
npm cache clean
npm install -g [email protected]
RequireJS funktioniert mit AMD-Module, nicht CommonJS.
InformationsquelleAutor asgoth
Ich war nicht in der Lage zu machen, arbeiten mit
require
, aber ich habe eine teilweise Lösung.grunt.js:
Kann ich
grunt watch
und ich bekomme ein ähnliches Ergebnis. grunt Fusseln, dann kompiliert, dann läuft testacular. Dies ist nicht so schnell wie ich gehofft hatte. testacular startet und Stoppt den server jedes mal.InformationsquelleAutor pgreen2