Подтвердить что ты не робот

Есть ли способ включить файл в кофе script?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Предположим, вы хотите включить included-file.coffee в main.coffee:

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

someVar = ...
exports.someVar = someVar

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

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

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

Ответ 3

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

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

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

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

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

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

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

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

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

  • yepnope.js или Modernizr.load на основе yepnope: Обратите внимание, что yepnope теперь устарел от своего поддерживающего, который рекомендует использовать инструменты сборки и конкатенацию вместо удаленной загрузки.
  • RequireJS
  • HeadJS
  • jQuery $.getScript
  • Vanilla AJAX + eval
  • ваша собственная реализация AMD

Ответ 4

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

#include MyBaseClass.coffee

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

Ответ 5

Я обнаружил, что использование "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 года доступен по этому URL-адресу.