J'aimerais savoir s'il existe un moyen d'inclure un fichier dans un script de type café… .. Quelque chose comme #include
en C ou require
en PHP ...
Que diriez-vous de coffeescript-concat ?
coffeescript-concat est un utilitaire permettant de prétraiter et de concaténer Fichiers source CoffeeScript.
Il est facile de conserver votre code CoffeeScript dans des unités séparées et toujours les exécuter facilement. Vous pouvez garder votre source logiquement séparée sans la frustration de mettre tout cela ensemble pour courir ou intégrer une page web. De plus, coffeescript-concat vous donnera un seul fichier source qui sera facilement compilé en un seul fichier Javascript.
Si vous utilisez coffeescript avec node.js (par exemple, lorsque vous utilisez l'outil de ligne de commande coffee
), vous pouvez utiliser la fonction require()
du nœud exactement comme pour un fichier JS.
Supposons que vous souhaitiez inclure included-file.coffee
dans main.coffee
:
Dans included-file.coffee
: déclarez et exportez les objets que vous souhaitez exporter
someVar = ...
exports.someVar = someVar
Dans main.coffee
, vous pouvez alors dire:
someVar = require('included-file.coffee').someVar
Cela vous donne une modularisation propre et évite les conflits d'espaces de noms lors de l'inclusion de code externe.
Si vous souhaitez exécuter un seul fichier JS dans le navigateur, nous vous recommandons d’utiliser un outil de construction tel que Grunt (ou Gulp , ou Cake ou Mimosa , ou tout autre ) pour pré-traiter votre Coffeescript, avec un module include/require/import qui concaténera les fichiers inclus dans votre sortie compilée, comme l'un de ceux-ci:
exports/require
de Node dans votre code, puis d’extraire et de concaténer tout ce qui est nécessaire dans un fichier intégrable au navigateur. Existe pour Grunt , Gulp , Mimosa et probablement la plupart des autres. À ce jour, je pense que c’est probablement la meilleure solution si vous recherchez la compatibilité entre Node et le navigateur (et même autrement).Si vous préférez éviter la complexité supplémentaire d'un outil de construction, vous pouvez utiliser Browserify stand-alone, ou des alternatives non basées sur la variable require
de Node, comme coffeescript-concat ou Coffee-Stir
Si vous écrivez exclusivement pour le navigateur et que cela ne vous gêne pas, ou si vous voulez vraiment, que votre script soit réparti sur plusieurs fichiers récupérés via AJAX, vous pouvez utiliser une multitude d'outils tels que:
$.getScript
Vous pouvez essayer cette librairie que j'ai faite pour résoudre le même problème coffee-stir
#include MyBaseClass.coffee
Pour plus de détails http://beastjavascript.github.io/Coffee-Stir/
J'ai trouvé que le fait d'utiliser "gulp-concat" pour fusionner mes scripts de café avant de les traiter a fait l'affaire. Il peut être facilement installé sur votre projet avec npm.
npm install gulp-concat
Puis éditez votre fichier 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/')
})
C'est le code que j'ai utilisé pour concaténer tous mes scripts café avant que gulp ne le traite dans la version finale de Javascript. Le seul problème est que les fichiers sont traités par ordre alphabétique. Vous pouvez indiquer explicitement le fichier à traiter pour obtenir votre propre ordre de fichiers, mais vous perdez la flexibilité d'ajouter des fichiers dynamiques .coffee.
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 à partir du 25 février 2015 est disponible à cette adresse.
Pour ce faire, Rails utilise des pignons et cette syntaxe a été adaptée pour https://www.npmjs.org/package/grunt-sprockets-directives Fonctionne bien pour moi.