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.

  1. 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.
  2. 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.
  3. 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 ...
Meine Antwort sagt so viel wie Ihre Frage: Sie haben, um zu definieren, "erfordern" ... Wie Praveen sagte, geben Sie uns einige code-Schnipsel, ...
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

Schreibe einen Kommentar