2012-12-18 24 views
0

我刚进入咖啡因的世界,我在Cakefiles中遇到了一些麻烦。如何将coffeescript编译为源的父目录?

这是我的理解,Cakefiles使用咖啡脚本语法;如果我想在子目录中查找文件,那么我需要fs模块并执行我需要做的任何操作,就好像我在使用nodejs应用程序一样吗?我只需要一个Cakefile来完成整个项目,对吗?我是否需要对package.json或其他任何项目进行更改以使用Cakefile?

话虽这么说,因为我一直在寻找在this delicious cakefile tutorial一些例子我也碰到过这样下面的代码片段:

{exec} = require 'child_process' 
task 'build', 'Build project from src/*.coffee to lib/*.js', -> 
    exec 'coffee --compile --output lib/ src/', (err, stdout, stderr) -> 
    throw err if err 
    console.log stdout + stderr 

我希望把我的coffescripts /coffee目录下,我希望他们编译为/为每个咖啡脚本找到。例如,如果它发现routes/coffee/index.coffee,编译后的js应输出为routes/index.js。为了做到这一点,我尝试运行$ coffee --output ../ .,但因为它不起作用 - 尽管我认为这是值得的尝试 - 我试着用Cakefile做这件事。

{exec} = require 'child_process' 
task 'build', 'Build project from *.coffee to ../*.js', -> 
    exec 'coffee --compile --output ../ .', (err, stdout, stderr) -> 
    throw err if err 
    console.log stdout + stderr 

这是以上代码段的修改版本。它没有工作。我想了解更多关于cakefiles的知识,以便我可以编写一个记录密码的函数,并在编译咖啡脚本时将其输出为目录。

如果你可以带我到一个解决方案或来源,可以帮助我找到解决方案,我将不胜感激。但请记住,我不理解文档中的高级咖啡脚本...结果示例对我的开发技能更有用。

+0

_“'$ coffee --output ../ .'但是因为它不起作用”_发生了什么而不是你所期望的? –

+0

哦,我现在发现了输出,它将'/ coffee/script.coffee'放入'../ coffee/script.js'中,以便它现在不在项目目录中。 – Logan

回答

3

我认为这里的关键区别在于工作目录。

- root 
-- lib 
--- foo.js <- target 
-- src 
--- foo.coffee 

当你有一个设置,并从root,运行coffee --compile --output lib/ src/它的作品,因为root/libroot/src都容易从root找到。

- root 
-- foo.js <- target 
-- coffee 
--- foo.coffee 

现在,从root当您运行coffee --compile --output ../ ./然后设置输出目录root/..和输入目录root/.(或简称root

这意味着,当你从root运行此命令你想简单地说:

coffee --compile --output ./ coffee/ 

或者,如果你cd coffee/,那么这个:

cd coffee 
coffee --compile --output ../ ./ 

应该正常工作。

+0

ahh优秀!谢谢!所以不需要使用文件系统模块或任何东西! – Logan

+0

不是,如果你只是想运行咖啡命令。 'Cakefile's仍然很方便。你可以把这个行包装在一个接口中,并用'cake compile'调用它,所以你不必记住语法。 –

+0

我明白了。为了使'--output'文件夹相对于正在编译的'source.coffee',我需要编写一个函数(也许可以将所有'.coffee'文件放入一个数组并获取它们的路径,并设置' --output'到'pwd /../'然后编译)。 – Logan

相关问题