使用js2coffee将整个项目转换为CoffeeScript

converting whole project to CoffeeScript with js2coffee

本文关键字:转换 CoffeeScript 项目 js2coffee 使用      更新时间:2023-09-26

问题

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"我们将FILECOFFEE作为字符串提供给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后执行此

更新

您可以在第一次运行后将dittorsyncmv交换以移动文件,因为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