2012年1月7日土曜日

Djangoで起動時にCoffeeScriptとLessのコンパイルをする

書いてみた。

どう書くのが作法的に良いのかはよく分かっていないが
Djangoのアプリケーションディレクトリの__init__.pyに書いて
それなりに動いたのでよしとする。

.coffeeと.lessは、アプリケーションディレクトリ以下 static/js および static/css にあるとする。

# myapp/__init__.py
import os
import os.path as path
import glob

staticpath = path.join("myapp","static")

def buildCoffee():
    curpath = path.abspath(os.curdir)
    dirpath = path.join(staticpath,"js")
    os.chdir(dirpath)
    for cfile in glob.glob("*.coffee"):
        cmtime = os.stat(cfile).st_mtime
        jsname = path.splitext(cfile)[0] + ".js"
        jmtime = os.stat(jsname).st_mtime if path.isfile(jsname) else 0
        if jmtime < cmtime:
            os.system("coffee -bc " + cfile)
            print ("compiled: " + cfile)
        else:
            print ("skipped: " + cfile)
    os.chdir(curpath)

def buildLess():
    curpath = path.abspath(os.curdir)
    dirpath = path.join(staticpath,"css")
    os.chdir(dirpath)
    for lfile in glob.glob("*.less"):
        lmtime = os.stat(lfile).st_mtime
        cssname = path.splitext(lfile)[0] + ".css"
        cmtime = os.stat(cssname).st_mtime if path.isfile(cssname) else 0
        if cmtime < lmtime:
            os.system("lessc " + lfile + " > " + cssname)
            print ("compiled: " + lfile)
        else:
            print ("skipped: " + lfile)
    os.chdir(curpath)
   
buildCoffee()
buildLess()
一応.coffeeおよび.lessファイルと、コンパイル済みの.jsと.cssの更新日付を見て
更新されてる時だけ再コンパイルするようにしてる。

0 件のコメント:

コメントを投稿