【发布时间】:2011-12-04 19:27:05
【问题描述】:
我想知道是否有办法在咖啡脚本中包含文件。
类似于 C 中的 #include 或 PHP 中的 require...
【问题讨论】:
标签: javascript include coffeescript
我想知道是否有办法在咖啡脚本中包含文件。
类似于 C 中的 #include 或 PHP 中的 require...
【问题讨论】:
标签: javascript include coffeescript
coffeescript-concat 是一个预处理和连接的实用程序 CoffeeScript 源文件。
它可以很容易地将您的 CoffeeScript 代码保存在单独的单元中,并且 仍然可以轻松运行它们。你可以保持你的源在逻辑上分开 没有将它们放在一起运行或嵌入的挫败感 一个网页。此外,coffeescript-concat 会给你一个 可以轻松编译为单个 Javascript 文件的源文件。
【讨论】:
我发现在处理它们之前使用“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 自 2015 年 2 月 25 日起可在此网址获得。
【讨论】:
你可以试试我制作的这个库来解决同样的问题coffee-stir 它非常简单。 只需输入#include 和要包含的文件的名称
#include MyBaseClass.coffee
【讨论】:
如果您想要在浏览器中运行单个 JS 文件,我建议使用像 Grunt(或 Gulp,或 Cake,或 Mimosa,或 any other)这样的构建工具预处理您的 Coffeescript,以及一个 include/require/import 模块,该模块会将包含的文件连接到您的编译输出中,例如以下之一:
exports/require API,然后将所需的所有内容提取并连接到浏览器包含的文件中。存在于Grunt、Gulp、Mimosa 以及可能大多数其他的。时至今日,我认为,如果您希望同时兼容 Node 和浏览器(甚至不兼容),这可能是最好的解决方案如果您希望避免构建工具的额外复杂性,您可以使用独立的Browserify,或不基于Node 的require 的替代方案,例如coffeescript-concat 或Coffee-Stir
如果您是专门为浏览器编写的,并且不介意,或者说真的希望您的脚本分布在通过 AJAX 获取的多个文件中,您可以使用多种工具,例如:
【讨论】:
Rails 使用 sprockets 来执行此操作,并且此语法已适应 https://www.npmjs.org/package/grunt-sprockets-directives。很适合我。
【讨论】:
如果您将 coffeescript 与 node.js 一起使用(例如,使用命令行工具 coffee 时),那么您可以像使用 JS 文件一样使用 node 的 require() 函数。
假设您想在main.coffee 中包含included-file.coffee:
在included-file.coffee:声明并导出要导出的对象
someVar = ...
exports.someVar = someVar
然后你可以在main.coffee 中说:
someVar = require('included-file.coffee').someVar
这为您提供了清晰的模块化,并在包含外部代码时避免了命名空间冲突。
【讨论】: