【程式新手】為什麼我寫的 JavaScript、Sass 需要編譯?編譯器又是什麼?

更新於 發佈於 閱讀時間約 5 分鐘

在初學程式的時候,我曾經看室友開發專案到一半時,突然坐在那發呆,於是我好奇一問,室友說:「我在等程式編譯完成啊。」

還記得當初還是程式小菜雞的我,懞懂無知的說:「編譯?哈哈哈,我們 JavaScript 都不需要編譯耶,可以直接跑在瀏覽器上。」

室友一臉莫名其妙地回我:「噢,是嗎⋯⋯」

現在回想起來真的想要給自己賞一巴掌,這邊我直接講結論,基本上 client 端(前端、APP)所撰寫的語言都需要經過編譯,才能在特定的執行環境中運行。



編譯器究竟是什麼?

在了解編譯究竟是什麼之前,首先要了解:程式碼依照自己所要開發的產品不同,而會有不一樣的執行環境,以我熟悉的前端領域中,一個應用程式的執行環境就是在瀏覽器上,也就是我們常聽到的 Web App。

了解程式碼會有不同的執行環境後,我們就可以來聊聊究竟什麼是編譯器了,首先維基百科針對編譯器的說明是這樣的:

編譯器(compiler)是一種電腦程式,它會將某種程式語言寫成的原始碼(原始語言)轉換成另一種程式語言(目標語言)。

其實我們現在撰寫的語言,有一些是機器(也就是電腦)讀不懂的,於是我們就需要仰賴其他電腦程式來幫我們將這些語言轉換成電腦所看得懂的機器語言,這樣的過程我們就稱為編譯。

這裡還要額外提個小知識,我們現在所撰寫的程式語言,都是人為設計出來的,其中不少是為了讓開發者更方便開發數位產品所誕生的。

舉例來說,JavaScript 的主要開發者 Brendan Eich 花了約 10 天創造出這門語言,為了就是讓開發者能更方便整合網頁開發的技術。



為什麼我寫的 JavaScript、SASS 需要編譯?

一開始寫 JavaScript 的時候,可能會有些對瀏覽器的誤會,諸如:以為瀏覽器讀得懂所有 JavaScript 的語法、以為 JavaScript 會一邊執行一邊報錯等。

這邊舉個大家最熟悉的例子,許多新的 JavaScript 語法、型別,或是 CSS3 的特定語法, IE 瀏覽器是不支援的,這就能說明,JavaScript 並不是適用於所有的執行環境,更多的是仰賴編譯器(Compiler)來進行處理,讓瀏覽器能讀懂特定的語法。

除了我們所熟知的 Google V8 引擎,可以讓 JavaScript 這個語言在瀏覽器上執行的效能更快外,Bable.js 也是知名的編譯器,可以讓同一支 JavaScript 檔案相容在不同的瀏覽器中。

再來我們聊聊為什麼大家常用的 SASS 程式語言也需要透過 SASS Loader、SASS Compiler 來進行編譯。

原因很簡單:那就是瀏覽器的內建引擎也讀不懂 SASS、SCSS,於是我們就必須仰賴其他的工具來進行編譯,將這門語言轉譯成瀏覽器讀的懂 CSS 。

一旦了解程式語言基本上都是要透過編譯來執行後,就可以減少開發上的除錯時間。

舉例來說,有時候你在框架中發現自己撰寫的程式碼,會一直出現「編譯錯誤」的報錯,基本上有兩個原因:

  1. 你就是把程式碼寫錯了
  2. 你沒有額外安裝編譯器

這件事為什麼會那麼重要呢?

舉個我曾經發生的小蠢事:某一天我很認真地在 Vue Cli 中撰寫 SASS ,但程式碼就是怎麼寫怎麼報錯,最後才發現根本不是我寫錯,而是當時的開發環境根本沒有「SASS Loader」呀。

當然編譯器的套件也會有版本相不相容的問題,但那又是另外一個議題了。

主要是希望大家可以透過這篇文章,稍微了解前端在開發時會遇到的編譯概念,在除錯時可以多一個工具及方向。

希望今天的文章有幫助到正在閱讀的你,如果你喜歡我的文章的話,可以留下你的愛心或是收藏我的文章,也或者可以點選「贊助」,你的一杯咖啡絕對是我持續寫下去的動力!或是透過拍拍手,用你小小的行動支持我的創作!

我是Vivian,我們下次見。


關於我:

一名從英文系畢業的前端工程師,喜歡閱讀、寫東西及自我成長。

|Instagram: Vivian Yeh|vivian_enlife

|聯絡我:vivian.enlife@gmail.com

留言
avatar-img
留言分享你的想法!
「所以以使用的案例來說,在瀏覽器上的 js 是直譯語言 不過是哪一種,需要看用哪一種方式實現這種語言的執行方式 因為說到底語言只是定義抽象語義,並無強制要用哪一種類型實現」 所以JS要編譯或是直譯要看當下的狀況囉
Vivian Yeh-avatar-img
發文者
2021/10/27
我覺得是耶,至少在使用 bable.js 的時候,就是需要先處理、先編譯。 包括在寫框架時,框架的語言也不全然是原生的語法,像是 Vue 的指令、react 的 JSX,也是仰賴先編譯再執行~ 反正只要在專案中使用不屬於原生 JS 的東西,基本上都要仰賴編譯:) 套件通常會自帶 compiler,讓大家能更方便的使用套件。 但這只是一個小概念啦~不會影響寫 code 有沒有寫對 XD 補充:因為各家瀏覽器使用的引擎不同,但以 google 的 v8 引擎來說,就是在 JS 執行前會轉譯為 C 語言,讓執行的速度更快,但因為這一段跟實際開發無關,所以平常也不會去特別研究人家的引擎是怎麼實作,以及編譯的結果如何影響執行速度哈哈,至於是他家瀏覽器引擎我就沒有研究了
喔喔原來JavaScript也要編譯!我以為他跟Python一樣是直譯耶 想說寫JavaScript也沒有像C++那樣先編譯再執行的 長知識ㄌ
Vivian Yeh-avatar-img
發文者
2021/10/27
其實我一開始也是看別人說 JS 是直譯語言,不需要經過編譯,這裡想分享一篇文章:https://yu-jack.github.io/2020/03/16/javascript-is-compiler-or-interpreter-language/ 裡面其實有提到,JS 在某些狀況並不是逐行執行, 在底層還是需要進行一些處理。 加上我在初期因為不曉得瀏覽器有各家實作的差異,理解上就有點出入,越寫越困惑。 如果想簡單一點,光是要解決瀏覽器相容,就必須仰賴 Bable.js 這個編譯器,至少這一點就一定要編譯了 XD
avatar-img
Vivian Yeh - 跨領域轉職的軟體工程師
449會員
103內容數
為了追求可以窩在座位上、可以心無旁騖思考問題、座位可以亂七八糟沒關係、不需要到處哈腰點頭跑客戶,不用腳踩十公分、連妝都可以不用化的職場人生,文組少女毅然決然踏上RD的養成日常。
2024/05/23
與 cookie 相比,localStorage 與 sessionStorage 的機制相對單純,兩者皆是瀏覽器中的儲存空間,與 cookie 最大的不同在於:localStorage 與 ⋯⋯
Thumbnail
2024/05/23
與 cookie 相比,localStorage 與 sessionStorage 的機制相對單純,兩者皆是瀏覽器中的儲存空間,與 cookie 最大的不同在於:localStorage 與 ⋯⋯
Thumbnail
2024/05/22
在瀏覽器環境中有許多的儲存空間,想要查看這些空間的話,可以透過「chrome > Dev Tools > Application > Storage」即能進行查看。 瀏覽器內存空間的差異不僅常常被拿來被當作面試考題,在實務開發中更扮演舉足輕重的角色,今天就想透過這系列的文章深度了解這些瀏覽器內存⋯
Thumbnail
2024/05/22
在瀏覽器環境中有許多的儲存空間,想要查看這些空間的話,可以透過「chrome > Dev Tools > Application > Storage」即能進行查看。 瀏覽器內存空間的差異不僅常常被拿來被當作面試考題,在實務開發中更扮演舉足輕重的角色,今天就想透過這系列的文章深度了解這些瀏覽器內存⋯
Thumbnail
2024/02/20
上一篇文章分享了 TypeScript 的定義、前端角色定位,如果你不是很確定「TypeScript 是什麼?」、「TypeScript 作為 JavaScript 的超集,在網頁開發扮演怎麼樣的角色?」這兩個問題的答案,建議可以回到上一篇先了解一下。
Thumbnail
2024/02/20
上一篇文章分享了 TypeScript 的定義、前端角色定位,如果你不是很確定「TypeScript 是什麼?」、「TypeScript 作為 JavaScript 的超集,在網頁開發扮演怎麼樣的角色?」這兩個問題的答案,建議可以回到上一篇先了解一下。
Thumbnail
看更多
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
軟體工程師體驗營的第三周,對於知識、學習、課程、社群的感想,持續內化中,我不想只有上課,也希望從學習過程獲得更多經驗,所以寫下了這篇記錄。我也意外發現剛學習的 JavaScript,說不定能讓我重拾學習程式互動藝術,這很令人開心,即使我正在考慮轉職,但創作是終生的,希望下次發作品能有些新展現。
Thumbnail
軟體工程師體驗營的第三周,對於知識、學習、課程、社群的感想,持續內化中,我不想只有上課,也希望從學習過程獲得更多經驗,所以寫下了這篇記錄。我也意外發現剛學習的 JavaScript,說不定能讓我重拾學習程式互動藝術,這很令人開心,即使我正在考慮轉職,但創作是終生的,希望下次發作品能有些新展現。
Thumbnail
這篇文章專門寫給「非」資訊相關科系畢業的人,說明怎麼樣開始學寫程式,還有到什麼程度才能轉到資訊相關產業。 我大學跟研究所都是念土木系,因為對寫程式蠻有興趣,所以除了系上的課之外,還有去資工系還有電機系修一些相關課程,因為不是資訊相關科系,所以有走了一些冤枉路,但是研究所的時候我已經可以開發套裝軟體了
Thumbnail
這篇文章專門寫給「非」資訊相關科系畢業的人,說明怎麼樣開始學寫程式,還有到什麼程度才能轉到資訊相關產業。 我大學跟研究所都是念土木系,因為對寫程式蠻有興趣,所以除了系上的課之外,還有去資工系還有電機系修一些相關課程,因為不是資訊相關科系,所以有走了一些冤枉路,但是研究所的時候我已經可以開發套裝軟體了
Thumbnail
為什麼要學習程式呢? 程式是怎麼分類的? 能處理什麼事情?
Thumbnail
為什麼要學習程式呢? 程式是怎麼分類的? 能處理什麼事情?
Thumbnail
「理解」與「不理解」之間,有著名為「語言隔閡」或「知識落差」的鴻溝。 翻譯、編程、教學,都有著同樣的底層邏輯,都是企圖跨越這樣的鴻溝,促進個體之間的相互理解、學習、合作,甚至進化。
Thumbnail
「理解」與「不理解」之間,有著名為「語言隔閡」或「知識落差」的鴻溝。 翻譯、編程、教學,都有著同樣的底層邏輯,都是企圖跨越這樣的鴻溝,促進個體之間的相互理解、學習、合作,甚至進化。
Thumbnail
在科技快速發展的現代,每個人都滿口大數據、人工智慧,。而大學的資工系也變得越來越熱門,學習程式也逐漸成為許多人考慮的事情。 在這篇文章,我會分享如何從零基礎開始學程式,給讀者開始的方向、避免你走冤枉路。
Thumbnail
在科技快速發展的現代,每個人都滿口大數據、人工智慧,。而大學的資工系也變得越來越熱門,學習程式也逐漸成為許多人考慮的事情。 在這篇文章,我會分享如何從零基礎開始學程式,給讀者開始的方向、避免你走冤枉路。
Thumbnail
初學程式時認為寫程式是在跟機器溝通,它懂了、可以動了,我的目的達成了,結案!然而大多時候,光是連編譯器吐出來的錯誤訊息都看不懂,更別說是考慮自己寫出來的程式碼的可讀性,而且專案太小也感覺不出維護上的困難。
Thumbnail
初學程式時認為寫程式是在跟機器溝通,它懂了、可以動了,我的目的達成了,結案!然而大多時候,光是連編譯器吐出來的錯誤訊息都看不懂,更別說是考慮自己寫出來的程式碼的可讀性,而且專案太小也感覺不出維護上的困難。
Thumbnail
在初學程式的時候,我曾經看室友開發專案到一半時,突然坐在那發呆,於是我好奇一問,室友說:「我在等程式編譯完成啊。」 還記得當初還是程式小菜雞的我,懞懂無知的說:「編譯?哈哈哈,我們 JavaScript 都不需要編譯耶,可以直接跑在瀏覽器上。」 室友一臉莫名其妙地回我:「噢,是嗎⋯⋯」
Thumbnail
在初學程式的時候,我曾經看室友開發專案到一半時,突然坐在那發呆,於是我好奇一問,室友說:「我在等程式編譯完成啊。」 還記得當初還是程式小菜雞的我,懞懂無知的說:「編譯?哈哈哈,我們 JavaScript 都不需要編譯耶,可以直接跑在瀏覽器上。」 室友一臉莫名其妙地回我:「噢,是嗎⋯⋯」
Thumbnail
做UI設計不懂程式也沒關係?甘五價好康? 「UI設計師需要會寫程式嗎?」 想當初在轉職前,我也曾經在網路上搜尋過這類的關鍵詞,也有許多UI大大撰寫過相關文章,爬梳過文章後,大部分的答案都是不用的。
Thumbnail
做UI設計不懂程式也沒關係?甘五價好康? 「UI設計師需要會寫程式嗎?」 想當初在轉職前,我也曾經在網路上搜尋過這類的關鍵詞,也有許多UI大大撰寫過相關文章,爬梳過文章後,大部分的答案都是不用的。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News