如何将coffeescript文件及其编译版本保存在不同的文件夹中?

时间:2013-05-11 06:37:09

标签: compiler-construction coffeescript

我希望我的文件/文件结构在我的网站上清洁。所以我不希望coffescript文件与其编译版本在同一文件夹中。

开发时我正在使用 - 编译器的watch键。我在

之前使用过这个命令
coffee -cw ./ ./

从网站的根目录启动时,所有coffeescript文件的递归工作都很好。但是有一个问题 - 它将编译后的文件放在同一个文件夹中,我试图避免这种情况。

是否可以对编译说 - “请编译每个coffeescript文件并将编译后的版本放在父文件夹中”?

更新

行。这里有一点澄清。即我有这个文件夹结构

app
  |- css
  |- images
  |- js
      |- coffee
      |- libs
      |- controllers
               |- coffee
      |- services
               |- coffee
               |- loggers
                      |- coffee

您可以猜到我想将所有coffeescript文件存储在coffee文件夹中,但将它们编译到父文件夹中。例如。我想再添加一个记录器,然后在 app / js / services / loggers / coffee 中添加newLogger.coffee,编译器将其编译并将newLogger.js放入 app / JS /服务/记录器

我可以在每个coffee文件夹

中使用此命令
 coffee -cw -o ../ ./

因此,在这种情况下有4个coffee文件夹,我为每个文件夹运行了4个编译器实例。我可以用一个实例替换它们吗?

5 个答案:

答案 0 :(得分:4)

来自coffeescript docs:

  

将src中.coffee文件的目录树编译为并行树   lib中的.js文件:

coffee --compile --output lib/ src/

答案 1 :(得分:3)

您可以使用gruntjs任务管理器执行此操作。使用grunt,您可以指定要维护的任何文件夹结构。

您还可以在编译后将任务添加到uglify所有js文件中。

Grunt对于开发非常有用,因为它可以监视源文件并在每次更改后重新编译它们。

我们现在正在项目中使用它来管理我们的前端。我们的任务包括:

  • 汇编.coffee.jade.less个文件。
  • 生成.js.css文件的连接。
  • 连接文件的缩小和使用。
  • 部署到Amazon S3。

以下是gruntfile.coffee的示例,它编译,连接uglifies并部署.coffee目录中的所有assets/js/文件:https://gist.github.com/lbeschastny/5716323(尚未测试)。

您可以在getting started section of grunt site

中找到有关如何运行它们的详细说明的更多示例

答案 2 :(得分:1)

看到这个链接 http://coffeescript.org/#usage

它说-o, - output [DIR]将所有已编译的JavaScript文件写出到指定的目录中。与--compile或--watch一起使用。

希望它有所帮助。 :)

答案 3 :(得分:0)

您需要完成单独的coffeescripts文件夹结构和编译的文件夹结构。

app
  |- css  
  |- images
  |- js
      |- libs
      |- controllers
      |- services
               |- loggers

这个将包含所有咖啡脚本。

app-src
  |- js
      |- controllers
      |- services
               |- loggers

然后在app和app-src coffee -cw app app-src的根文件夹中编译。

答案 4 :(得分:0)

  

所以,在这种情况下有4个咖啡文件夹,我有4个编译器实例   为他们每个人奔跑。我可以用一个实例替换它们吗?

没有。 Coffee编译器仅支持更改源的目录路径的前缀以生成输出路径;它不支持向其添加../这样的后缀。

coffee命令行实用程序是用Coffescript编写的,源代码是very well documented,因此您可以自己修改它以添加所需的选项。最简单的方法是简单地改变--output选项的含义。 (虽然那时你无法与世界分享变化,这将是一种耻辱。)我认为你需要做的就是改变:

  dir       = if opts.output then path.join opts.output, baseDir else srcDir

为:

  dir       = if opts.output then path.join baseDir, opts.output else srcDir

outputPath()函数中:command.coffee line 261