# [FE201] 前端中階:那些前端會用到的工具們
###### tags:`Frontend`
[TOC]
## jQuery
> Lightweight Footprint
Only 30kB **minified** and gzipped. Can also be included as an AMD module
* minified 簡單化+單純化,把壟詞贅字刪掉
jQuery 是一個 **JavaScript library**
### jQuery 為什麼會出現
2006 年附近是個瀏覽器百家爭鳴的時代, IE, Chrome, Opera, Safari, Firefox ... 然後使用者比率也差不多,所以寫一種 JS 要最多寫五種以上的版本,所以 JQuery 就誕生並獲得人氣拉~
### 語法 + 實作(note)
`$ === jQuery`,用`.()`來把元素轉換成 JQ 元素
$().val('defautl-val') //設定預設值
$().val() // 取得值
.ready() //
## bootstrap
[好模板網站](https://bootswatch.com/)
使用前記得要先引入 stylesheet 和 js
> 要注意版本,有些語法在最新版本不支援,例如 badge 的某些語法 [資料](https://github.com/twbs/bootstrap/issues/31217)
### Grid system
通常以 12 column 為預設
## CSS 預處理器
> 有些筆記是補充影片的部分
程式碼 => SCSS 或 SASS => CSS
```css=
/* 常用指令: */
--watch 看指定的檔案有沒有改變,有改變就做壓縮
--style=compressed 就是minify,把註解空格拿掉
/* 常用符號: */
& 重複上一層的選擇器的字串
/* 常用顏色變數命名: */
primary
secondary
warning
text
background
/* 常用檔案命名: */
_mixins.sass
_variables.sass
_components.sass 會跨頁的元件
_layouts.sass 會跨頁, 更大的, 比較少出現元件
/* 一些 SCSS 程式碼: */
@import filename
%btn
@extend %btn 引入 attribute,用"," 來一次做完
@mixin name 包住要重複使用的屬性
@include name 釋放 mixin
或是用 +name 釋放 mixin
跟 extend不同,可以使用變數、隨著"+'會重複出現多次、通常用在一組功能
@function => 可以回傳數值 用@return、通常用在一個屬性之下做運算
@each $type in $types
.flex-#{$type}
@each $key, $value in $types
.flex-#{$type}
用 $arr: value, value2 或是 $obj: (key: value, key2: value2)
@for $i from 0 through 5
.h#{5 - $i + 1}
font-size: 1 + 0.2rem * $i
@if $i / 2 == 0
do soth
@else
do soth
```
## gulp
src dest series parellel, babel, sass, uglify, minify/css, rename + gulp
就是個管理流程的 library, 函式可以自己寫或去 npm 找現成的,[Babel: Using Plugins](https://gulpjs.com/docs/en/getting-started/creating-tasks/#compose-tasks)
這次練習有用到 babel,有些地方它沒轉換好。gulp 就只是自動幫你跑那些 library,如果 library 出錯,gulp 執行後的檔案也會出錯,不會因為你用自動工具 gulp 就不會出錯XD,詳見[Gulp 練習紀錄](/77oQIV9MQoaQMWXi9e03cw)
## webpack
* ECMA 這個規範寫出來的,不同==執行環境==所使用的模組、模組化規範不一樣,瀏覽器的版本不一定會支援這些語法,所以就有了 webpack 誕生
* 瀏覽器不支援的功能,用額外的工具來轉換就可以了
* Webpack 把不同模組包在一起讓瀏覽器可以執行它們的工具,連 CSS 也可以 import啦
* 使用 webpack 的原因之一是原生的瀏覽器沒辦法打包 npm 安裝的模組,而 webpack 除了解決這個問題之外,還順便擴展了「模組」的定義,任何資源都可以視為一個模組,搭配強大的 ==loader== 與 ==plugin== 系統
* ==要轉換的檔案/你寫的 raw 程式碼,通常會放在 src,輸出到 dist==
* 想要壓縮 module的話可以把 production mode 打開
npm, npx, global