2013-05-07 79 views
2

我的使用情况如下:如何让coffeescript编译器忽略源文件的一部分?

我决定尝试对一些项目的NodeJS CoffeeScript的,我想我的一些源文件,开始与#!/usr/bin/env node

CoffeeScript的对待与#为注释开头的行。

我知道,你可以嵌入JS代码在.coffee但事实并非如此,因为

file.coffee

`#!/usr/bin/env node` 

foo = 'bar' 

编译为: file.js

(function() { 
    #!/usr/bin/env node; 
    var foo; 

    foo = 'bar'; 

}).call(this); 

回答

5

编译器没有按” t支持这一点。参见:https://github.com/jashkenas/coffee-script/issues/2215

但是为什么不用coffee来代替它?

#!/usr/bin/env coffee 
console.log 'Hello World' 

然后就运行./my_code.coffeecoffee可执行文件仅仅是一个节点的包装,可以在几乎所有情况下使用。


或者在编译步骤之后创建某种构建系统。但你不应该真的需要。

+0

我的拉链请求链接的用例是一个将可执行文件安装到路径的包。该脚本需要一个shebang,它需要是Javascript(你不能指望用户安装Coffeescript)。 – 2013-05-07 19:13:34

+1

因此,制作一个构建脚本或一个调用“咖啡”并为您编译的蛋糕任务,然后将shebang添加到正确的文件中。 – 2013-05-07 19:20:00

+0

我做到了。我不得不。但是,如果您有一个要编译的脚本文件夹,并且关心跨平台,那并不好玩。它应该像'咖啡-o lib -c src --shebang'一样容易# – 2013-05-07 19:43:05

0

你想要的是CoffeeScript不可能的,尽管你可以 - 正如Alex Wayne所建议的那样 - 如果你愿意,可以手动将文件添加到文件中。

我为我的一个项目做了什么,正在制作一个非常小的带脚本的JS脚本,它加载了从CoffeeScript编译的JS代码。见这个文件https://github.com/meryn/jumpstart/blob/master/bin/jumpstart。这很好。

这样做的另一个优点是测试更简单。您不必开始新的子进程来运行代码。相反,您可以使用呼叫run函数,或者您可以调用它。这当然会留下传递适当参数的问题。我通过使run函数(请参阅https://github.com/meryn/jumpstart/blob/master/src/run.coffee的源代码)将代码几乎全部委托给runWith函数,该函数可以传递脚本需要的所有输入变量(环境,cli参数等)。