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

标签 javascript coffeescript

问题:

js2coffe 仅适用于单个文件 输入/输出重定向。 转换整个项目及其目录结构真的很痛苦。

想要转换一个 ExpressJS 默认应用程序项目,包括。是目录结构吗?

查看下面的脚本

最佳答案

更新:如果您赶时间,请检查下面这个脚本的简短版本。

一个简单的 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 循环:

for FILE in `find arguments` .... 表示:

每次 find 偶然发现 .js 文件时,find 输出都会分配给 FILE 字符串

查找参数:

-name "*.js" 抓取所有以 .js 结尾的文件

-type f 必须是 file 类型,因为我们不需要 .js 目录,而只需要文件

-o -path './node_modules' -prune

excludes files in dir's ./node_modules 添加-prune 很关键,否则find会掉入dir 并打印在目录中找到的 *.js 文件

做 block :

if [ -e ${FILE} ] ;然后

-e 标志检查来自 FILE 的字符串是否是文件系统上的现有文件,否则 else被执行。

字符串操作:

COFFEE=${FILE//.js/.coffee}

我们将 COFFEE 变量赋给一个我们替换的字符串 .js.coffee 通过 bash 字符串操作:${STRING//match_this/replace_with}

转化:

js2coffee "$FILE"> "$COFFEE" 我们将 FILECOFFEE 作为 string 提供给 js2coffee

额外:

您想将所有转换后的 .coffee 文件移动到一个新目录,但保留结构?

在 Linux 中使用 findrsync 或在 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 目录,对于那些不想转换其依赖项的人

关于javascript - 使用 js2coffee 将整个项目转换为 CoffeeScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091818/

相关文章:

javascript - 从服务器读取 CSV 并将内容放入 html 或 javascript 的下拉列表中

javascript - 从通过 get ajax 请求收到的 html 源代码获取电子邮件

javascript - 有没有办法避免 AngularJS 在页面加载之前显示所有隐藏的元素?

d3.js - D3/咖啡气泡图中的不同状态

javascript - 我们可以将参数传递给 CoffeeScript 类吗?

javascript - 在 if 语句中使用 Fetch 响应

javascript - Content Aware Sidbars 插件博客页面上的错误通知

node.js - Swagger UI 不发送 url 参数

node.js - 对周围的所有 Node JS 框架/库等感到困惑

javascript - 通过 AJAX in rails 加载更多用户电影