Sunday, June 18, 2006

Build Dojo

วันนี้ทดลอง build Dojo เอง เพื่อที่จะได้ทำ customize Dojo.js
(Dojo สามารถกำหนดให้เรา รวม object ที่ใช้บ่อยๆ
ให้รวมอยู่ใน file เดียวได้
ส่วนพวกที่ไม่รวมอยู่ใน file นั้น แล้วเกิดต้องการขึ้นมา
Dojo จะใช้ ajax load มาให้อัตโนมัติ)

Dojo ใช้ Ant เป็น build tool
ชอบตรงที่ run ครั้งแรก แล้วมันขึ้นแบบนี้

$ ant -Dprofile=wcf -Ddocless=true release intern-strings
Buildfile: build.xml

-check-config:

-fix-config:
[copy] Copying 5 files to /Users/pphetra/.ant/lib

[echo] +--------------------------------------------------------+
[echo] | Due to some horrendous design decisions by the authors |
[echo] | of Ant, it has been necessaray to install some jar |
[echo] | files to your ~/.ant/ directory. Given the nature of |
[echo] | the problem, it will be necessaray for you to re-run |
[echo] | your build command. |
[echo] | |
[echo] | The Dojo team apologies for this inconvenience. |
[echo] | |
[echo] | The system will now exit. |
[echo] +--------------------------------------------------------+


BUILD FAILED
/Users/pphetra/dev/javascript/release-0.3.1/buildscripts/build.xml:225: Sorry, please re-run your build command, it should work now

ภาษาอังกฤษวันละคำ
horrendous -> extremely unpleasant

ที่น่าสนใจอีกอย่าง ก็คือใน build.xml ของ Dojo
มีการใช้ jython ด้วย

<script language="jython"><![CDATA[
import sys
# make the python standard library avialable
sys.path.append("lib/pyLib.zip")
sys.path.append(".")

# import re
import os
from buildUtil import *

print "Setting version for Dojo to: " + dojo.getProperty("version")
replaceVersion(dojo.getProperty("release_dir") + "/source.__package__.js", dojo.getProperty("version"))
]]></script>


ประเด็นที่น่าสนใจอีกอันของ Dojo
ก็คือการ compress javascript file
ดัว file "dojo.js" ซึ่งเป็น file หลัก จะถูก compress ไว้
หลักการที่ใช้ก็คือ ตัด white space ออกให้หมด
แล้วก็แทนที่ local variable ด้วย running number ให้หมด

โดย Dojo ใช้วิธีการ customize Rhino (เป็นวิธีที่ดี เพราะได้ parser มาฟรีๆ)
ถ้าเราดูใน path $YOUR_DOJO_DIR/buildscripts/lib
จะเห็นว่ามี custom_rhino.diff มาให้ดูด้วย

ทีนี้เราก็สามารถนำเอา custom_rhino.jar ที่ Dojo เตรียมไว้ เอาไปใช้ในงานอื่นๆของเราได้
ถ้าใช้แบบ command line วิธีการใช้ ก็แค่

java -jar custom_rhino -c INPUT > OUTPUT

แต่ให้ดีต้องใช้ใน Ant

<java jar="./lib/custom_rhino.jar" fork="true" output="${dstFile}">
<arg value="-c" />
<arg value="${srcFile}" />
</java>


ประเด็นที่น่าสนใจประเด็นสุดท้าย
ใน dojo มี flash component ด้วย
ซึ่งใช้สำหรับ feature client storage (อ่านรายละเอียดใน blog ของ Brad Neuberg)
ในการ build Dojo จะใช้ mtasc ในการ compile action script

Related link from Roti

5 comments:

Brad GNUberg said...

Sawatdee Krup! I lived in Phuket and Bangkok for awhile, so can speak a little bit of Thai (but can't read it). I created Dojo Storage, so if you have any questions feel free to ask. Happy birthday to King Bhumibol by the way!

Best,
Brad Neuberg

polawat phetra said...

Hi Brad,
Sawasdee Krup to you too. Khun sabai dee rue pao krub?
(how are you? hope you still remember some Thai. :) )

Wow, what a surprise to know that you used to live in Thailand before.
Hope you enjoyed your time here.
Sure, if I have any questions about Dojo Storage, I will ask for your suggestions.

Kob Khun Krup (Thank you)

Brad GNUberg said...

Polawat, what part of Thailand do you live in?

Pop gan mai krup,
Brad

polawat phetra said...

Hi Brad,

Sadly, I live in Bangkok.
I wish to work in Maehongson (north of thailand).

When were you in Thailand?
Sawasdee Krup
polawat

Anonymous said...

อยากทราบว่า ประเด็นที่น่าสนใจคือ Dojo
ก็คือการ compress javascript file
ดัว file "dojo.js" ซึ่งเป็น file หลัก จะถูก compress ไว้
หลักการที่ใช้ก็คือ ตัด white space ออกให้หมด
แล้วก็แทนที่ local variable ด้วย running number ให้หมด
มันทำยังไงหรอ ครับ