Есть ли способ включить файл в сценарий кофе? - PullRequest
24 голосов
/ 11 октября 2011

Я хотел бы знать, есть ли способ включить файл в сценарий кофе.Что-то вроде #include в C или require в PHP ...

Ответы [ 6 ]

18 голосов
/ 24 января 2013

Если вы используете coffeescript с node.js (например, при использовании инструмента командной строки coffee), тогда вы можете использовать функцию require() узла точно так же, как и для JS-файла.

Скажите, что вы хотитевключить included-file.coffee в main.coffee:

В included-file.coffee: объявить и экспортировать объекты, которые вы хотите экспортировать

someVar = ...
exports.someVar = someVar

В main.coffee вы можете сказать:

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

Это обеспечивает чистую модульность и позволяет избежать конфликтов пространства имен при включении внешнего кода.

17 голосов
/ 11 октября 2011

Как насчет coffeescript-concat ?

coffeescript-concat - это утилита, которая предварительно обрабатывает и объединяет Исходные файлы CoffeeScript.

Это позволяет легко хранить ваш код CoffeeScript в отдельных блоках и по-прежнему запускать их легко. Вы можете держать свой источник логически разделенным без разочарования воедино все это, чтобы запустить или встроить в веб-страница. Кроме того, Coffeescript-Concat даст вам один исходный файл, который легко скомпилировать в один файл Javascript.

3 голосов
/ 20 августа 2014

Tl; DR: Browserify , возможно, с помощью инструмента сборки типа Grunt ...

Обзор решений

Инструмент сборки + препроцессор импорта

Если вам нужен отдельный JS-файл для запуска в браузере, я рекомендую использовать инструмент сборки, такой как Grunt (или Gulp , или Cake или Mimosa , или любой другой ) для предварительной обработки вашего Coffeescript вместе с модулем include / require / import, который объединит включенные файлы в ваш скомпилированный вывод, например, один из это:

  • Browserify : вероятно, растущий стандарт и мой личный фаворит, позволяет использовать в вашем коде API exports/require Node, а затем извлекает и объединяет все необходимое в файл, включаемый в браузер. Существует для Grunt , Gulp , Mimosa и, вероятно, большинства других. Я считаю, что до сегодняшнего дня это, вероятно, лучшее решение, если вы после совместимости как с Node, так и с браузером (и даже иначе)
  • Некоторые Rails Sprocket-подобные решения, такие как grunt-sprockets-directives или gulp-include , также будут согласованно работать с препроцессорами CSS (хотя те, как правило, имеют свои собственные импортные механизмы)
  • Другие решения включают grunt-includes или grunt-import

Автономный препроцессор импорта

Если вы предпочитаете избегать дополнительной сложности инструмента сборки, вы можете использовать Browserify в автономном режиме или альтернативы, не основанные на require узла, такие как coffeescript-concat или Кофеварка

[Не рекомендуется] Асинхронная динамическая загрузка (AJAX + eval)

Если вы пишете исключительно для браузера и не возражаете, а точнее хотите, хотите, чтобы ваш сценарий распределялся по нескольким файлам, полученным через AJAX, вы можете использовать множество инструментов, таких как:

  • yepnope.js или . Modernizr. .load на основе yepnope: обратите внимание, что yepnope теперь не поддерживается его сопровождающим, который рекомендует использовать инструменты сборки и конкатенацию вместо удаленной загрузки
  • RequireJS
  • HeadJS
  • JQuery * $.getScript
  • Ванильный AJAX + Eval
  • ваша собственная реализация AMD
2 голосов
/ 11 апреля 2014

Вы можете попробовать эту библиотеку, которую я сделал, чтобы решить ту же самую проблему, перемешать кофе очень просто.Просто введите #include и имя файла, который вы хотите включить

#include MyBaseClass.coffee

Подробнее http://beastjavascript.github.io/Coffee-Stir/

1 голос
/ 25 февраля 2015

Я обнаружил, что использование "gulp-concat" для объединения моих кофейных скриптов перед их обработкой помогло.Он может быть легко установлен в ваш проект с помощью npm.

npm install gulp-concat

Затем отредактируйте ваш 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/')
})

Это код, который я использовал для объединениявсе мои сценарии кофе до gulp обработали его в финальной сборке Javascript.Единственная проблема - файлы обрабатываются в алфавитном порядке.Вы можете явно указать, какой файл обрабатывать для достижения собственного порядка файлов, но вы теряете гибкость добавления динамических файлов .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 по состоянию на 25 февраля,2015 доступен по этому адресу.

0 голосов
/ 03 августа 2014

Rails использует звездочки для этого, и этот синтаксис был адаптирован к https://www.npmjs.org/package/grunt-sprockets-directives. Хорошо работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...