2013-07-09 3 views
7

Ich habe eine JavaScript-Anwendung mit Requirejs geschrieben, um Dependency-Injektion zu behandeln. Ich habe die Datei kompiliert, aber ich habe den offensichtlichen Fehler, wenn es als Skript einschließlich:kompilieren von Javascript-Programm mit Requirejs, um Abhängigkeit zu entfernen

Uncaught ReferenceError: define is not defined

Ich würde meine JavaScript App nicht wie auf einem AMD-Loader abzuhängen, wenn der Entwickler entscheidet, nicht zu verwenden. Aufgrund der Komplexität der Anwendung möchte ich sie jedoch verwenden, um die Abhängigkeiten meiner App zu verarbeiten.

Gibt es einen Compiler, der JavaScript kompiliert, um die AMD-Abhängigkeit zu entfernen? Ich habe etwas Grummeln um Grunt herum gesehen, aber ich habe keine klaren Antworten darauf gefunden, ob dies ein Merkmal von Grunt ist oder nicht.

Antwort

5

Sie können die Abhängigkeit "require/define" nicht vollständig entfernen, aber Sie können sie durch ein viel kleineres Shim ersetzen, das keine erheblichen Leistungseinbußen verursacht. Siehe den Abschnitt How can I provide a library to others that does not depend on RequireJS? des Optimierungsleitfadens:

If you are building a library for use on web pages that may not use RequireJS or an AMD loader, you can use the optimizer to combine all your modules into one file, then wrap them in a function and use an AMD API shim. This allows you to ship code that does not ship with all of RequireJS, and allows you to export any kind of API that works on a plain web page without an AMD loader.

almond is an AMD API shim that is very small, so it can be used in place of require.js when all of your modules are built into one file using the RequireJS optimizer. The wrap build config option will put a function wrapper around the code, or you can provide your own wrapper if you need to do extra logic.