發表文章

目前顯示的是 2018的文章

Markdown

[心得]升級專案 PHP 版本

Upgrading GitHub from Rails 3.2 to 5.2 https://githubengineering.com/upgrading-github-from-rails-3-2-to-5-2/?utm_source=wanqu.co&utm_campaign=Wanqu+Daily&utm_medium=website 最近在公司進行某個專案的 PHP 升版 ,目標是從 7.1 升級到 7.2。 因為程式碼有點龐大,歷史又有點久了,升級的過程中意外的麻煩, 今天剛好看到這篇文章,值得借鏡。 本次升級的專案,因框架本身因為許多相容問題下個大版本中已解決但因為結構差異太大沒辦法生大版,只能想辦法去找出問題點,並嘗試去看一下官方的 issue 或 commit 資訊中尋找對應的解法,能升級小版本且不會與其他套件互沖的或是會互衝但可以解決的就升級,不行的話只能自己搬過來,個人覺得最困難的應該是找到真正的問題點在哪個環節,確認之後想辦法重現驗證,再去解決,底下是大致上的升級流程。 升級流程: 1.升級 PHP 2.跑測試,發現 PHPUnit 不相容 3.升級 PHPUnit 4.升級框架 PHPUnit 相關套件 5.成功跑測試碼,整理分類因升級導致的錯誤 6.比較 PHP 官方從 7.0 遷移到 7.1,7.1 遷移到 7.2 的所有內容,修正錯誤,以及檢查可能被影響但是沒出錯的程式碼(例如有些特性的移除或新增,或是即將棄用等,測試碼可能測不出來,或下個小版本可能會出問題,需要提前發現解決) 7.測試OK後,與維運人員合作部署到公司的開發環境 8.在開發環境反覆測試,不斷發現問題 ,修正問題 流程比較長的地方主要卡在三個部分: 1.有些程式碼屬於其他部門,要修正的話可能會影響到邏輯,需反覆溝通協調, 這邊雙方時程的掌握和追蹤因屬於不同部門,很難掌握。 2.由於區分開發,測試,正式環境,本身 branch 又是從正式環境長出來的,開發的時程拉長會不斷的遇到修好但是又出現有問題的 commit  merge 上來,或是各環境本身某些邏輯行為就有差異,這部分只能整理一份注意事項給同事參考,降低寫出不相容的程式碼,以及勤勞到 code review 工具上注意所有正在開發中的 co...

[ES6]Regex

Regex ref: MDN ECMAScript 6入门  CH5 1 2 3 4 5 let regex = new RegExp ( 'xyz' , 'i' ) let regex = /xyz/i let regex = new RegExp ( /xyz/i )) 1 2 若第二個參數有指定修飾符,則會取代原有的正規表達中的修飾 new RegExp ( /abc/ig , 'i' ). flags // "i" s 修饰符:dotAll 模式 正则表达式中,点(.)是一个特殊字符,代表任意的单个字符,但是有两个例外。一个是四个字节的 UTF-16 字符,这个可以用u修饰符解决;另一个是行终止符(line terminator character)。 所谓行终止符,就是该字符表示一行的终结。以下四个字符属于”行终止符“。 U+000A 换行符(\n) U+000D 回车符(\r) U+2028 行分隔符(line separator) U+2029 段分隔符(paragraph separator) 1 2 /foo.bar/ . test ( 'foo\nbar' ) // false 上面代码中,因为.不匹配\n,所以正则表达式返回false。 但是,很多时候我们希望匹配的是任意单个字符,这时有一种变通的写法。 1 2 /foo[^]bar/ . test ( 'foo\nbar' ) // true 这种解决方案毕竟不太符合直觉,ES2018 引入s修饰符,使得.可以匹配任意单个字符。 1 /foo.bar/s . test ( 'foo\nbar' ) // true 具名组匹配 (實用) 正则表达式使用圆括号进行组匹配。 1 const RE_DATE = /(\d{4})-(\d{2})-(\d{2})/ ; 上面代码中,正则表达式里面有三组圆括号。使用exec方法,就可以将这三组匹配结果提取出来。 1 2 3 4 5 6 const RE_DATE = /(\d{4})-(\d{2})-(\d{2...