有没有办法在咖啡脚本中包含文件?

时间:2011-10-10 20:13:16

标签: javascript include coffeescript

我想知道是否有办法在咖啡脚本中包含文件。 类似于C中的#include或PHP中的require ...

6 个答案:

答案 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-concat 是一个预处理和连接的实用程序   CoffeeScript源文件。

     

可以轻松地将CoffeeScript代码保存在单独的单元中   仍然很容易运行它们。您可以保持源在逻辑上分开   没有把所有这些放在一起运行或嵌入的挫败感   一个网页。另外,coffeescript-concat会给你一个单独的   源文件,可以轻松编译为单个Javascript文件。

答案 2 :(得分:3)

Tl; DR:Browserify,可能使用Grunt等构建工具...

解决方案评论

构建工具+导入预处理器

如果你想要的是在浏览器中运行的单个JS文件,我建议使用像Grunt(或GulpCake或{{3}这样的构建工具}},或Mimosa)预处理您的Coffeescript,以及一个include / require / import模块,它将包含的文件连接到您的编译输出中,如下所示:

  • any other:可能是升级的标准和我个人的最爱,让您在代码中使用Node的exports/require API,然后提取并连接浏览器可包含文件中所需的所有内容。存在BrowserifyGruntGulp以及其他大多数人。直到今天,我认为如果您在兼容Node和浏览器之后(甚至是其他方式),这可能是最好的解决方案。
  • 一些Rails像Mimosagrunt-sprockets-directives这样的类似Sprocket的解决方案也可以与CSS预处理器以一致的方式工作(尽管这些解决方案通常都有自己的导入机制)。
  • 其他解决方案包括gulp-includegrunt-includes

独立导入预处理器

如果您宁愿避免使用构建工具的额外复杂性,可以使用grunt-import独立版,也可以使用不基于节点require的备选方案,例如Browserify或{{ 3}}

[不推荐]异步动态加载(AJAX + eval)

如果你是专门为浏览器编写的,并且不介意,或者更确切想要,你的脚本分布在通过AJAX获取的几个文件中,你可以使用无数的工具,如:

答案 3 :(得分:2)

你可以试试这个库来解决同样的问题咖啡搅拌 它非常简单。 只需输入#include和要包含的文件的名称

即可
#include MyBaseClass.coffee

详情 http://beastjavascript.github.io/Coffee-Stir/

答案 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。适合我。