我想知道是否有办法在咖啡脚本中包含文件。
类似于C中的#include
或PHP中的require
...
答案 0 :(得分:18)
如果将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
这为您提供了干净的模块化,并在包含外部代码时避免了命名空间冲突。
答案 1 :(得分:17)
coffeescript-concat 是一个预处理和连接的实用程序 CoffeeScript源文件。
可以轻松地将CoffeeScript代码保存在单独的单元中 仍然很容易运行它们。您可以保持源在逻辑上分开 没有把所有这些放在一起运行或嵌入的挫败感 一个网页。另外,coffeescript-concat会给你一个单独的 源文件,可以轻松编译为单个Javascript文件。
答案 2 :(得分:3)
如果你想要的是在浏览器中运行的单个JS文件,我建议使用像Grunt(或Gulp或Cake或{{3}这样的构建工具}},或Mimosa)预处理您的Coffeescript,以及一个include / require / import模块,它将包含的文件连接到您的编译输出中,如下所示:
exports/require
API,然后提取并连接浏览器可包含文件中所需的所有内容。存在Browserify,Grunt,Gulp以及其他大多数人。直到今天,我认为如果您在兼容Node和浏览器之后(甚至是其他方式),这可能是最好的解决方案。如果您宁愿避免使用构建工具的额外复杂性,可以使用grunt-import独立版,也可以使用不基于节点require
的备选方案,例如Browserify或{{ 3}}
如果你是专门为浏览器编写的,并且不介意,或者更确切想要,你的脚本分布在通过AJAX获取的几个文件中,你可以使用无数的工具,如:
$.getScript
答案 3 :(得分:2)
你可以试试这个库来解决同样的问题咖啡搅拌 它非常简单。 只需输入#include和要包含的文件的名称
即可#include MyBaseClass.coffee
答案 4 :(得分:1)
我发现在处理它们之前使用“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/')
截至2015年2月25日的gulp-concat可在此网址上找到。
答案 5 :(得分:0)
Rails使用sprockets来执行此操作,此语法已适用于https://www.npmjs.org/package/grunt-sprockets-directives。适合我。