[英]How to converting whole project to CoffeeScript with js2coffee on Windows 7
[英]converting whole project to CoffeeScript with js2coffee
問題 :
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
: npm install -g js2coffee
腳本說明
for循環:
for FILE in `find arguments` ....
表示:
每次find
偶然find
.js文件時,find輸出都會分配給FILE
字符串
查找參數:
-name "*.js"
以.js結尾的所有文件
-type f
類型必須是文件類型,因為我們不希望.js目錄,而僅文件類型
-o -path './node_modules' -prune
排除dir的./node_modules
文件,添加-prune
至關重要,否則find將下降到dir中並打印目錄中找到的*.js
文件
做封鎖:
if [ -e ${FILE} ] ; then
-e標志檢查是否從字符串FILE
是文件系統中的現有文件,否則else
被執行。
字符串操作:
COFFEE=${FILE//.js/.coffee}
我們為COFFEE
變量分配一個字符串,通過bash字符串操作將.js替換為.coffee : ${STRING//match_this/replace_with}
轉換:
js2coffee "$FILE" > "$COFFEE"
我們將FILE
和COFFEE
作為字符串輸入 js2coffee
額外:
您想將所有轉換后的.coffee文件移動到新目錄,但保留結構嗎?
由於cp不會創建此命令所需的目錄,因此在Linux中將find與rsync
一起使用,或者在OS X上與ditto
一起使用。 這是一個在主目錄中執行的小腳本,它將完成這項工作
所有.coffee文件將在/ coffee目錄中復制.js文件層次結構
for FILE in `find . -name "*.coffee"`
do
ditto .${FILE/./} coffee${FILE/./}
done
將文件轉換為.coffee 后執行此操作
更新
您可以在第一次運行后與mv
交換ditto
或rsync
來移動文件,因為像cp
這樣的mv
不會創建子目錄。
更新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訪問,訪問第w $ {F}我們替換的.js - > /.js
(/是一個分隔符)與.coffee - > /.coffee
這樣的: ${f/.js/.coffee}
。
apple="green";
echo $apple;
輸出:
green
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.