10

我有一堆 .coffee 文件需要合并到一个文件中。

我有像 rails 应用程序一样设置的文件夹:

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

Coffeescript 有一个命令可以让您将多个咖啡脚本连接到一个文件中,但它似乎只适用于一个目录。例如,这很好用:

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

但是我需要能够包含一堆子目录,比如这个非工作命令:

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

有没有办法做到这一点?是否有一种 UNIXy 方式来传递子目录中所有文件的列表?

我在 OSX 中使用终端。

它们都必须合并到一个文件中,否则每个单独的文件都会被编译和包装:

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

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

4

7 回答 7

28

CoffeeScript 文档

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

因此,您可以像这样在命令行(我使用 bash)实现您的目标:

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

其中 file1 - fileN 是要编译的咖啡脚本文件的路径。

于 2011-11-08T07:01:37.380 回答
6

您可以编写一个 shell 脚本或 Rake 任务先将它们组合在一起,然后再编译。就像是:

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

然后编译output.coffee

根据您的需要调整路径。还要确保该output.coffee文件不在您正在搜索的同一路径中,find否则您将进入无限循环。

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

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

于 2011-01-02T14:56:40.937 回答
3

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

于 2011-09-11T20:17:49.997 回答
2

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

咖啡 --output public --join --compile app

app 是我的工作目录,其中包含多个子目录,而 public 是放置 ~output.js 文件的位置。如果在 nodejs 中编写应用程序,则易于自动化此过程

于 2012-11-08T21:56:21.647 回答
2

这对我有帮助(-o输出目录,-j加入 project.js,-cw编译并深入观看 coffeescript 目录):

coffee -o web/js -j project.js -cw coffeescript
于 2013-05-21T06:34:39.123 回答
1

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

Cake 很容易安装和设置,在编辑项目时从 vim 调用 cake 就很简单了

:!cake build

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

由于我也忙于学习构建文件的最佳方式以及结合主干和蛋糕使用coffeescript,我在github上创建了一个小项目作为自己的参考,也许它对你也有帮助和一些基本的东西。所有编译的文件都在www文件夹中,以便您可以在浏览器中打开它们,并且所有源文件(除了 cake 配置)都在src文件夹中。在此示例中,所有 .coffee 文件都被编译并组合在一个输出 .js 文件中,然后将其包含在 html 中。

于 2012-07-14T02:59:50.017 回答
0

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

i = 0
foo = -> i++
...
foo()

那么var i生成的 JavaScript 中只有一个声明,并且i会递增。但是如果你将foo函数声明移动到另一个 CoffeeScript 文件中,那么它i就会存在于foo作用域中,而外部i不会受到影响。

所以连接 CoffeeScript 是一个更明智的解决方案,但仍然存在混淆的可能性;连接代码的顺序几乎肯定很重要。我强烈建议改为模块化你的代码。

于 2011-02-03T19:45:27.130 回答