一場大小寫轉換的客服遊戲

蟲探理查
8分鐘風格

我的部落格網站是架在 netlify 的雲端服務上,前一陣子有一個奇怪的 bug 會造成網站無法發佈更新,這個 bug 只會在 netlify 上發生,在我自己的 mac 電腦上是不會發生的,在 netlify 上面的錯誤訊息是長這副德行:

錯誤訊息
錯誤訊息

而且怪的是,這個錯誤不是總是發生,9 次錯誤可能會有 1 次沒錯誤,找 bug 找老半天找不到,後來沒辦法,就上 netlify 的 forum 去發問。

大約隔天,有人提供了一個人與人的連結,咦?我指的是「討論串的連結」才對。總之,他認為我的錯誤訊息和這個討論串提到的錯誤訊息有點像,建議我試試討論串裡的建議,修改引用的函式庫版本,也就是修改 package.json 檔案。

大亨升級為大大亨 Gatsby 3

蟲探理查
11分鐘風格

Gatsby 3 有一個很重大的改變,有關圖片的語法都改變了。原有的 project 如果升級到 gatsby 3 圖片語法沒有跟著改的話,有可能沒問題、也可能會不能跑了,或出現一些錯誤。因為我的 project 有些奇怪的錯誤,所以我乾脆就把我的 blog 圖片語法做個升級,這就是所謂的有拜有保佑吧,咦?

攝影師:Rodolfo Clix,來源:Pexels
攝影師:Rodolfo Clix,來源:Pixels

plugin 升級

gatsby 2 相片的 plugin 用的是gatsby-image,升級的時候可以先移除,然後改用gatsby-plugin-image,並一併升級相片有關的plugins:

    npm uninstall gatsby-image
    npm install gatsby-plugin-image gatsby-plugin-sharp gatsby-transformer-sharp

原本 gatsby 2 不管靜態或是動態圖檔,都是在檔案開頭匯入import Img from 'gatsby-image'的 Img 這個 component 來設定相片。

今晚我想來點 nullish coalescing operator

蟲探理查
11分鐘風格

type coercion

一般寫程式的時候像在跟機器講話,而且他們通常邏輯比你好,又脾氣不太好。

機器:「你要不要吃晚餐?」

Richard:「今晚我想來點兇巴巴的起司牛肉可頌」

機器:「伶杯是先問你要不要吃?還沒問你吃什麼?」

幸運的是,在 javascript 這個語言中,機器個性稍微的隨和一點。他看你有回答晚餐的名字,就當你要吃晚餐,所以接著把你的晚餐顯示在螢幕上。

  const dinnerOfRichard = '起司牛肉可頌' //我回答「起司牛肉可頌」
  //機器決定要顯示什麼
  const coercion = (dinnerOfPerson) => {
  //如果dinnerOfPerson沒有東西,也就是null、undefined或空字串,javascript就會把它視為false
    if(dinnerOfPerson){
      console.log('是的你晚上要吃晚餐,而且要吃:',dinnerOfRichard)
    } else {
      console.log('你不吃晚餐')
    }
  }
  coercion(dinnerOfRichard);//螢幕顯示「是的你晚上要吃晚餐,而且要吃:起司牛肉可頌」
  const dinnerOfJolin = ''//Jolin沒有回答
  coercion(dinnerOfJolin);//螢幕顯示「你不吃晚餐」

如果你不回答,或是回答不吃(false 、0 、空字串、null 、undefined) ,機器也都可以接受這些答案,並且依照你計畫的顯示:「你不吃晚餐」,機器心理會想著「既然你沒有說食物的名字,那麼我就當你不吃晚餐好了。」