问题:
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"
我们将 FILE
和 COFFEE
作为 string 提供给 js2coffee
额外:
您想将所有转换后的 .coffee 文件移动到一个新目录,但保留结构?
在 Linux 中使用 find 和 rsync
或在 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
目录,对于那些不想转换其依赖项的人
关于javascript - 使用 js2coffee 将整个项目转换为 CoffeeScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091818/