簡體   English   中英

使用js2coffee將整個項目轉換為CoffeeScript

[英]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 js2coffeenpm 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"我們將FILECOFFEE作為字符串輸入 js2coffee

額外:

您想將所有轉換后的.coffee文件移動到新目錄,但保留結構嗎?

由於cp不會創建此命令所需的目錄,因此在Linux中將findrsync一起使用,或者在OS X上與ditto一起使用。 這是一個在主目錄中執行的小腳本,它將完成這項工作

所有.coffee文件將在/ coffee目錄中復制.js文件層次結構

for FILE in `find . -name "*.coffee"`
do 
    ditto .${FILE/./} coffee${FILE/./}    
done

將文件轉換為.coffee 執行此操作

更新

您可以在第一次運行后與mv交換dittorsync來移動文件,因為像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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM