it-swarm.com.de

Gibt es eine Möglichkeit, Dateien in ein Kaffeeskript aufzunehmen?

Ich würde gerne wissen, ob es eine Möglichkeit gibt, eine Datei in ein Kaffeeskript einzufügen . So etwas wie #include in C oder require in PHP ...

24
Mathieu Mahé

Wie wäre es mit coffeescript-concat ?

coffeescript-concat ist ein Hilfsprogramm, das .__ vorverarbeitet und verkettet. CoffeeScript-Quelldateien.

Es macht es einfach, Ihren CoffeeScript-Code in separaten Einheiten und .__ zu speichern. lass sie trotzdem leicht laufen. Sie können Ihre Quelle logisch getrennt halten ohne die Frustration, wenn Sie alles zusammenstellen, um in .__ zu laufen oder einzubetten. eine Internetseite. Zusätzlich erhalten Sie mit coffeescript-concat ein einzelnes Quelldatei, die leicht in eine einzige Javascript-Datei übersetzt werden kann.

17
Jason Reis

Wenn Sie coffeescript mit node.js verwenden (z. B. bei Verwendung des Befehlszeilentools coffee), können Sie die Funktion require() des Knotens genau wie bei einer JS-Datei verwenden.

Angenommen, Sie möchten included-file.coffee in main.coffee aufnehmen:

In included-file.coffee: deklarieren und exportieren Sie Objekte, die Sie exportieren möchten

someVar = ...
exports.someVar = someVar

In main.coffee können Sie dann sagen:

someVar = require('included-file.coffee').someVar

Dies ermöglicht eine saubere Modularisierung und vermeidet Namensraumkonflikte bei der Einbeziehung von externem Code.

17
jerico

Tl; DR: Browserify , möglicherweise mit einem Build-Tool wie Grunt ...

Lösungsüberprüfung

Werkzeug erstellen + Vorprozessor importieren

Wenn Sie möchten, dass eine einzelne JS-Datei im Browser ausgeführt wird, empfehle ich die Verwendung eines Build-Tools wie Grunt (oder Gulp oder Cake oder Mimosa ). oder any other ) zur Vorverarbeitung Ihres Coffeescript zusammen mit einem Include/Require/Import-Modul, das die enthaltenen Dateien in Ihrer kompilierten Ausgabe verkettet, wie beispielsweise eine der folgenden:

  • Browserify : Wahrscheinlich der steigende Standard und mein persönlicher Favorit. Hiermit können Sie die exports/require-API von Node in Ihrem Code verwenden. Anschließend werden alle erforderlichen Informationen in eine mit dem Browser kompatible Datei extrahiert und verkettet. Besteht für Grunt , Gulp , Mimosa und wahrscheinlich für die meisten anderen. Bis heute denke ich, dass es wahrscheinlich die beste Lösung ist, wenn Sie nach Kompatibilität sowohl Node als auch den Browser (und sogar sonst) suchen.
  • Einige ritzelähnliche Rails-Lösungen wie grunt-sprockets-directives oder gulp-include funktionieren auch konsistent mit CSS-Vorprozessoren (obwohl diese normalerweise über eigene Importmechanismen verfügen).
  • Andere Lösungen umfassen grunt-include oder grunt-import

Standalone-Importvorprozessor

Wenn Sie lieber die zusätzliche Komplexität eines Build-Tools vermeiden möchten, können Sie Browserify als eigenständige Lösung oder Alternativen verwenden, die nicht auf require des Knotens wie coffeescript-concat oder Coffee-Stir basieren.

[Nicht empfohlen] Asynchrones dynamisches Laden (AJAX + eval)

Wenn Sie ausschließlich für den Browser schreiben und es Ihnen nichts ausmacht oder Sie wirklich wollen, dass Ihr Skript auf mehrere Dateien verteilt wird, die über AJAX abgerufen werden, können Sie eine Vielzahl von Tools wie die folgenden verwenden:

  • yepnope.js oder Modernizr .load basierend auf yepnope: Bitte beachten Sie, dass yepnope jetzt von seinem Betreuer abgelehnt wird, der die Verwendung von Build-Tools und Verkettung anstelle des Remote-Ladens empfiehlt
  • RequireJS
  • HeadJS
  • jQuery$.getScript
  • Vanille AJAX + Bewertung
  • ihre eigene Implementierung von AMD
3

Sie können diese Bibliothek, die ich gemacht habe, versuchen, um dasselbe Problem zu lösen

#include MyBaseClass.coffee

Für Details http://beastjavascript.github.io/Coffee-Stir/

2
Lpc_dark

Ich fand, dass die Verwendung von "gulp-concat" zum Verschmelzen meiner Kaffeeskripte vor der Verarbeitung den Trick bewirkte. Es kann leicht mit npm in Ihr Projekt installiert werden.

npm install gulp-concat

Dann bearbeiten Sie Ihre gulpfile.js:

var gulp = require('gulp')
,coffee = require('gulp-coffee')
,concat = require('gulp-concat');

gulp.task('coffee', function(){
  gulp.src('src/*.coffee')
    .pipe(concat('app.coffee')
    .pipe(coffee({bare: true}).on('error', gulp.log))
    .pipe(gulp.dest('build/')
})

Dies ist der Code, den ich verwendet habe, um alle meine Kaffeeskripte zu verketten, bevor der Schluck ihn zum endgültigen Build-Javascript verarbeitet hat. Das einzige Problem ist, dass die Dateien in alphabetischer Reihenfolge verarbeitet werden. Sie können explizit angeben, welche Datei verarbeitet werden soll, um Ihre eigene Dateireihenfolge zu erreichen. Sie verlieren jedoch die Flexibilität, dynamische .coffee-Dateien hinzuzufügen.

gulp.src(['src/file3.coffee', 'src/file1.coffee', 'src/file2.coffee'])
  .pipe(concat('app.coffee'))
  .pipe(coffee({bare: true}).on('error', gulp.log))
  .pipe(gulp.dest('build/')

gulp-concat ab dem 25. Februar 2015 ist unter dieser URL verfügbar.

1
chrsc

Rails verwendet dazu Kettenräder, und diese Syntax wurde an https://www.npmjs.org/package/grunt-sprockets-directives angepasst. Funktioniert gut für mich.

0
aceofspades