Я хотел бы знать, есть ли способ включить файл в кофе script.
Что-то вроде #include
в C или require
в PHP...
Есть ли способ включить файл в кофе script?
Ответ 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
Ответ 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-адресу.
Ответ 6
Rails использует звездочки для этого, и этот синтаксис был адаптирован для https://www.npmjs.org/package/grunt-sprockets-directives. Хорошо работает для меня.