使用js2coffee将整个项目转换为CoffeeScript
converting whole project to CoffeeScript with js2coffee
问题:
js2coffe仅适用于单个文件输入/输出重定向。转换整个项目及其目录结构可能是一件非常痛苦的事情。
想要转换ExpressJS默认应用程序项目(包括其目录结构(吗?
查看下方的脚本
UPDATE:如果您赶时间,请查看下面这个脚本的简短版本。
一个简单的Bash脚本为您完成任务:
#!/bin/bash
for FILE in `find . -name "*.js" -type f -o -path './node_modules' -prune -o -path './components' -prune`
do
if [ -e $FILE ] ; then
COFFEE=${FILE//.js/.coffee}
echo "converting ${FILE} to ${COFFEE}"
js2coffee "$FILE" > "$COFFEE"
else
echo "File: {$1} does not exist!"
fi
done
制作一个文件,例如all2coffee,将其放在/usr/local/bin中,并在终端中添加一个chmod + x
标志
要求
全局安装js2coffee
,如果尚未安装,请执行:npm install -g js2coffee
解释的脚本
对于循环:
for FILE in `find arguments` ....
表示:
每次find
偶然发现.js文件时,find输出都被分配给FILE
字符串
查找参数:
-name "*.js"
抓取所有带有.js结尾的文件
-type f
必须是文件类型,因为我们不想要.js目录,但文件只有
-o -path './node_modules' -prune
排除目录的./node_modules
中的文件添加-prune
至关重要,否则find将下降到目录中并打印在目录中找到的*.js
文件
do块:
if [ -e ${FILE} ] ; then
-e标志检查FILE
中的字符串是否为文件系统上的现有文件,否则执行else
。
字符串操作:
COFFEE=${FILE//.js/.coffee}
我们将COFFEE
变量作为字符串替换.js与.coffee通过bash字符串操作:${STRING//match_this/replace_with}
转换:
js2coffee "$FILE" > "$COFFEE"
我们将FILE
和COFFEE
作为字符串提供给js2coffee
额外:
您想将所有转换后的.coffee文件移到一个新目录中,但保留结构吗?
在Linux中与rsync
一起使用find,或者在Os X上使用ditto
因为cp不会创建此命令所需的目录。这里有一个要在中执行的小脚本将执行工作的主目录
所有.coffee文件都将在/coffee目录中复制.js文件层次结构
for FILE in `find . -name "*.coffee"`
do
ditto .${FILE/./} coffee${FILE/./}
done
在您将文件转换为.coffee后执行此
更新
您可以在第一次运行后将ditto
或rsync
与mv
交换以移动文件,因为mv
(如cp
(不会创建子目录。
更新2
为那些准时的人添加了一行,请参阅下面的第二个答案!
更新3
添加了一个选项,将./node_modules
目录从转换中排除,用于那些不想转换其依赖项
对于那些时间短的人,请使用这个漂亮的一行它的开始在当前目录中。/并通过细分市场将每个.js
文件研磨成.coffee
find . -type f -name '*.js' | while read f; do echo "grinding $f to ${f/.js/.coffee} "; js2coffee "$f" > "${f/.js/.coffee}"; done
是否要从转换中排除./node_modules
目录?请使用以下选项:
find . -path ./node_modules -prune -o -type f -name '*.js' | while read f; do echo "grinding $f to ${f/.js/.coffee} "; js2coffee "$f" > "${f/.js/.coffee}"; done
小提示:您也可以使用此循环来移动或复制文件:用需要执行的任何操作替换js2coffee命令。find
输出(找到的文件列表(可以简单地修改和过滤。
在bash中,子字符串提取(或替换(很简单,就像上面的例子:
重要信息(长版本(bash变量可以通过在变量名称前添加$来访问,但最初它们是在没有$$的情况下定义的,所以为了您的心理健康,请记住这一点,并检查代码中的$var/var=语法,以防出现一些逻辑错误。在Bash中有一段时间没有做任何事情后,我一次又一次地犯这个错误,所以我认为分享这个简单的事实是明智的(也可能是我,作为一个糟糕的开发人员(
重要信息(简短版本(变量定义:var_name=value
变量访问:$var_name=value
,坏主意:$var_name=value
,稍后由$var_name
访问。
在本例中,变量f由$f{f}访问时,我们将.js->/.js
(/是一个分隔符(替换为.coffee>/.coffee
,如下所示:${f/.js/.coffee}
。
apple="green";
echo $apple;
输出:
green
- 一旦转换为CoffeeScript,就调用一个普通的JS函数
- 将 Javascript 转换为 coffeescript
- 如何将 JavaScript forEach 循环/函数转换为 CoffeeScript
- 任何转换对象*值*的Javascript或Coffeescript“映射”函数
- 在 Coffeescript 中将 while 循环转换为 for 循环
- 使用 Coffeescript 将表格行转换为 Rails 中的链接
- 将d3.js JavaScript函数转换为CoffeeScript
- 如何将JavaScript转换为CoffeeScript有两种情况
- 将Coffeescript中的true和false分别转换为1和-1
- 写一个coffeescript函数,将json数组转换成我想要的格式,这是一种简洁的方式
- Angular Coffeescript到Javascript的转换——下一个函数被认为是前一个函数的主体
- 如何将带有两个函数参数的jQuery函数转换为Coffeescript
- 我如何将这个JS转换为CoffeeScript
- 如何将未嵌套的JSON转换为Javascript(或Coffeescript)中的嵌套HTML列表
- CoffeeScript被转换成错误的javascript
- 在我构建的这个自定义区域中,coffeescript's的胖箭头是如何转换成Javascript的?
- 将for each循环转换为Coffeescript
- 将coffeescript函数转换为javascript
- Javascript到Coffeescript的转换
- 如何在Windows 7上使用js2coffee将整个项目转换为CoffeeScript