将多个Coffeescript文件合并到一个文件中? (多个子目录)

时间:2011-01-01 18:58:35

标签: terminal coffeescript

我有一堆.coffee文件需要加入一个文件。

我的文件夹设置类似于rails应用程序:

/src/controller/log_controller.coffee
/src/model/log.coffee
/src/views/logs/new.coffee

Coffeescript有一个命令可以让你将多个coffeescripts加入到一个文件中,但它似乎只能用于一个目录。例如,这很好用:

coffee --output app/controllers.js --join --compile src/controllers/*.coffee

但我需要能够包含一堆类似于这个非工作命令的子目录:

coffee --output app/all.js --join --compile src/*/*.coffee

有办法做到这一点吗?是否有UNIX方法传递子目录中所有文件的列表?

我在OSX中使用终端。

它们都必须加在一个文件中,因为否则每个单独的文件都会被编译。包裹着这个:

(function() { }).call(this);

这打破了一些函数调用的范围。

7 个答案:

答案 0 :(得分:28)

来自CoffeeScript documentation

  

-j, - join [FILE]:在编译之前,按照传递的顺序将所有脚本连接在一起,并将它们写入指定的文件。用于构建大型项目。

所以,你可以在命令行(我使用bash)实现你的目标:

coffee -cj path/to/compiled/file.js file1 file2 file3 file4

其中file1 - fileN是您要编译的coffeescript文件的路径。

答案 1 :(得分:7)

您可以先编写一个shell脚本或Rake任务将它们组合在一起,然后进行编译。类似的东西:

find . -type f -name '*.coffee' -print0 | xargs -0 cat > output.coffee

然后编译output.coffee

根据需要调整路径。另外,请确保output.coffee文件与您使用find搜索的路径不同,否则您将进入无限循环。

http://man.cx/find | http://www.rubyrake.org/tutorial/index.html

此外,您可能对Stackoverflow上有关搜索目录的其他帖子感兴趣:

答案 2 :(得分:3)

我刚刚发布了CoffeeToaster的alpha版本,我想它可能对你有帮助。 http://github.com/serpentem/coffee-toaster

答案 3 :(得分:2)

使用咖啡命令行工具最简单的方法。

coffee --output public --join --compile app

app是我的工作目录,包含多个子目录,public是放置~output.js文件的地方。如果在nodejs中编写应用程序

,则可以轻松实现此过程的自动化

答案 4 :(得分:2)

这帮助了我(-o输出目录,-j加入到project.js,-cw编译并全面观察coffeescript目录:

coffee -o web/js -j project.js -cw coffeescript

答案 5 :(得分:1)

使用cake将它们全部编译在一个(或多个)生成的.js文件中。 Cakefile用作控制咖啡脚本编译顺序的配置 - 对于更大的项目非常方便。

Cake非常容易安装和设置,在您编辑项目时从vim调用cake就是

:!cake build

您可以刷新浏览器并查看结果。

由于我也忙着学习构建文件的最佳方法,并将coffeescript与backbone和cake结合使用,我创建了一个small project on github来保留它作为我自己的参考,也许它会有所帮助你也围着蛋糕和一些基本的东西。所有编译的文件都在 www 文件夹中,以便您可以在浏览器中打开它们,所有源文件(蛋糕配置除外)都在 src 文件夹中。在此示例中,所有.coffee文件都在一个输出.js文件中进行编译和组合,然后将其包含在html中。

答案 6 :(得分:0)

或者,您可以使用--bare标志,编译为JavaScript,然后在必要时包装JS。但这可能会产生问题;例如,如果您有一个代码

的文件
i = 0
foo = -> i++
...
foo()

然后在生成的JavaScript中只有一个var i声明,i将递增。但是,如果您将foo函数声明移动到另一个CoffeeScript文件,则其i将存在于foo范围内,而外部i将不受影响。

因此,连接CoffeeScript是一个更明智的解决方案,但仍然存在混淆的可能性;连接代码的顺序几乎肯定是重要的。我强烈建议您对代码进行模块化。