Asciidoctor 是一個由 Ruby 開發,基於 asciidoc 格式作解析、編譯成其它格式文件的套件。
有人利用編譯軟體,把 Ruby 的 Code 編成 javascript ,一切在一開都很美好。
一直到某一天 Google 的 V8 引擎作了改版…… 問題發生了。
Asciidoctor 在輸出檔案的時候,會加一個編譯時間的資訊。對於要查看哪個版本比較新,這是很重要。在輸出的時候,會去判斷輸出的結果是否帶有時區資訊,依結果作一些調整。
不過在 V8 引擎中加入本地化特性時,這個功能就出錯了。舊有的時區是全英文的,所以在執行 new Date().toString() 時,會得到類似「Fri Feb 24 2017 15:35:13 GMT+0800 (CST)」的字串。CST 應該是代表中原標準時間(China Standard Time)的縮寫。
不過現在得到結果會變成「Fri Feb 24 2017 15:35:13 GMT+0800 (台北標準時間)」,這導致 javascript 在判斷資料時,會認為回傳的結果有帶時區資料(這是對的),但是偏偏不認得這個時區代表什麼(這就糟了)。所以會導致編譯的時候發生會終止程式的錯誤。
結論就是無法順利産出結果。就目前的狀況,除非是直接修改 Ruby 程式,重新打包 javascript ,或是全部用 javascript 重寫一遍(不用轉譯器)。否則這個問題無解。
至於為什麼認為是 V8 引擎的問題呢?這是因為更早些時候,我在使用 asciidoc 在 chrome 的官方套件時,同樣遇到這個問題。今天又在 node.js 環境中遇到,所以導致問題的原因,就該是兩者共同使用的核心,V8 引擎了。
沒有留言:
張貼留言