做爲前端菜鳥,剛開始接觸webpack
時,是由於vue
,經過vue-cli
拉下來的代碼,裏面webpack
基本已經配置好了,須要咱們本身配置的很少,一直想弄明白webpack
是怎麼用的,簡單記錄一下,模擬vue
的目錄結構,使用的webpack
和webpack-dev-server
版本也和vue
中的同樣,因此這兩個安裝時指定了版本。通常vue
的目錄結構是css
mkdir webpack-practice && cd webpack-practice // 建立並打開項目 npm init // 這時會生成一個package.json文件 npm install --save-dev webpack@3.6.0 // --save-dev 開發依賴,這時會生成package-lock.js
新建dist
文件夾,並建立index.html
文件,並在index.html
中引入將要被webpack
打包過來的bundle.js
文件;新建src
文件夾,並建立js
入口文件main.js
。如今的目錄結構是html
<!-- dis/index.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div id="app"></div> <script src="bundle.js"></script> </body> </html>
給頁面加點背景試試前端
// src/main.js document.body.style.background = 'pink';
如今index.html
和main.js
仍是不相關的,用webpack
將main.js
打包到dist
目錄下vue
$ ./node_modules/.bin/webpack src/main.js dist/bundle.js
$ ./node_modules/.bin/webpack src/main.js dist/bundle.js Hash: 9f53edbc27a012ab9184 Version: webpack 3.6.0 Time: 59ms Asset Size Chunks Chunk Names bundle.js 2.52 kB 0 [emitted] main [0] ./src/main.js 50 bytes {0} [built]
這時src中就生成了一個bundle.js
文件node
用瀏覽器直接打開看看webpack
發現頁面已經變了,說明webpack
成功將main.js
打包到bundle.js
中去了。nginx
webpack
配置文件web
在根目錄新建webpack.config.js
,採用官方的配置vue-cli
// webpack.config.js const path = require('path'); module.exports = { entry: './src/main.js',//入口文件 output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') } }
配置好了執行npm
$ ./node_modules/.bin/webpack
$ ./node_modules/.bin/webpack Hash: 08e137312cf5d4feb095 Version: webpack 3.6.0 Time: 55ms Asset Size Chunks Chunk Names bundle.js 2.53 kB 0 [emitted] main [0] ./src/main.js 55 bytes {0} [built]
執行這條命令會自動去尋找當前目錄下的webpack.config.js
文件。經過配置文件,比以前操做起來方便多了,咱們能夠有更快捷的操做。
npm操做方式
咱們可使用npm start
命令來代替上述繁瑣的操做,設置package.json
文件中的scripts
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "webpack" },
$ npm start > webpack-practice@1.0.0 start /Users/liuzhiqin/Documents/study/webpack-practice > webpack Hash: 08e1373a2cf5d4feb095 Version: webpack 3.6.0 Time: 53ms Asset Size Chunks Chunk Names bundle.js 2.53 kB 0 [emitted] main [0] ./src/main.js 55 bytes {0} [built]
執行這個命令會在node_modules/.bin
中尋找webpack
,不管是全局仍是局部安裝的webpack
,你都不須要寫前面那指明詳細的路徑了。
css
文件首先咱們讓頁面的內容更豐富些,在src
中新建page.js
,並寫些內容
// src/page.js module.exports = function () { let content = document.createElement('div'); content.textContent = 'In the begining God created the heavens and the earth'; return content; }
入口文件是main.js
,因此要將page.js
引入到main.js
中
// src/main.js import Page from './page'; document.body.style.background = 'pink'; document.querySelector('#app').appendChild(Page());
運行一下試試
$ npm start > webpack-practice@1.0.0 start /Users/liuzhiqin/Documents/study/webpack-practice > webpack Hash: b4bcab267ae059f4e8b5 Version: webpack 3.6.0 Time: 65ms Asset Size Chunks Chunk Names bundle.js 3.21 kB 0 [emitted] main [0] ./src/main.js 135 bytes {0} [built] [1] ./src/page.js 193 bytes {0} [built]
而後看看頁面
接下來咱們給文字加點樣式,在src
新建page.css
文件,加些樣式
/* src/page.css */ #app div{ color: #333; font-size: 30px; font-family: fantasy; }
一樣在main.js
中引入,同時咱們將背景顏色改一下
// src/main.js import Page from './page'; import './page.css'; document.body.style.background = '#f7f7f7'; document.querySelector('#app').appendChild(Page());
運行一下試試
$ npm start > webpack-practice@1.0.0 start /Users/liuzhiqin/Documents/study/webpack-practice > webpack Hash: 5d67b4883c9d13aec1e1 Version: webpack 3.6.0 Time: 65ms Asset Size Chunks Chunk Names bundle.js 3.77 kB 0 [emitted] main [0] ./src/main.js 155 bytes {0} [built] [1] ./src/page.js 193 bytes {0} [built] [2] ./src/page.css 273 bytes {0} [built] [failed] [1 error] ERROR in ./src/page.css Module parse failed: /Users/liuzhiqin/Documents/study/webpack-practice/src/page.css Unexpected character '#' (2:0) You may need an appropriate loader to handle this file type. | /* src/page.css */ | #app div{ | color: '#fff'; | font-size: 30px; @ ./src/main.js 3:0-19 npm ERR! code ELIFECYCLE npm ERR! errno 2 npm ERR! webpack-practice@1.0.0 start: `webpack` npm ERR! Exit status 2 npm ERR! npm ERR! Failed at the webpack-practice@1.0.0 start script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /Users/liuzhiqin/.npm/_logs/2018-10-19T06_24_25_011Z-debug.log
咦,怎麼到page.css
那裏報錯了,報錯信息寫的很清楚,須要合適的loader
去處理這種文件類型。loader
是webpack
中用來處理不一樣文件的,如樣式、圖片、JS等資源,最後打包輸出。webpack
處理css
文件須要style-loader
和css-loader
。
安裝style-loader
和css-loader
$ npm install --save-dev style-loader css-loader npm WARN css-loader@1.0.0 requires a peer of webpack@^4.0.0 but none is installed. You must install peer dependencies yourself. npm WARN webpack-practice@1.0.0 No repository field. + style-loader@0.23.1 + css-loader@1.0.0 added 42 packages from 54 contributors in 5.966s
並在webpack.config.js中配置
... module: { rules: [ { test: /\.css$/, use: [ { loader: "style-loader" }, { loader: "css-loader" } ] }, ] }
運行一下
$ npm start > webpack-practice@1.0.0 start /Users/liuzhiqin/Documents/study/webpack-practice > webpack Hash: 0c5a8f5abb63caaabad1 Version: webpack 3.6.0 Time: 393ms Asset Size Chunks Chunk Names bundle.js 20.6 kB 0 [emitted] main [0] ./src/main.js 158 bytes {0} [built] [1] ./src/page.js 193 bytes {0} [built] [2] ./src/page.css 1.07 kB {0} [built] [3] ./node_modules/css-loader!./src/page.css 252 bytes {0} [built] + 3 hidden modules
看看頁面效果
webpack
處理scss
文件和css相似。首先也是在src
目錄下新建page.scss
文件,並在main.js
中引入
// src/page.scss #app{ div{ text-align: center; border: 1px solid red; } } // src/main.js import Page from './page'; import './page.css'; import './page.scss'; document.body.style.background = '#f7f7f7'; document.querySelector('#app').appendChild(Page());
運行一下確定會報錯
$ npm start > webpack-practice@1.0.0 start /Users/liuzhiqin/Documents/study/webpack-practice > webpack Hash: e6d2ef92a954bef9d9f4 Version: webpack 3.6.0 Time: 412ms Asset Size Chunks Chunk Names bundle.js 21.2 kB 0 [emitted] main [0] ./src/main.js 181 bytes {0} [built] [1] ./src/page.js 193 bytes {0} [built] [2] ./src/page.css 1.07 kB {0} [built] [3] ./node_modules/css-loader!./src/page.css 252 bytes {0} [built] [7] ./src/page.scss 263 bytes {0} [built] [failed] [1 error] + 3 hidden modules ERROR in ./src/page.scss Module parse failed: /Users/liuzhiqin/Documents/study/webpack-practice/src/page.scss Unexpected character '#' (2:0) You may need an appropriate loader to handle this file type. | // src/page.scss | #app{ | div{ | text-align: center; @ ./src/main.js 4:0-21 npm ERR! code ELIFECYCLE npm ERR! errno 2 npm ERR! webpack-practice@1.0.0 start: `webpack` npm ERR! Exit status 2 npm ERR! npm ERR! Failed at the webpack-practice@1.0.0 start script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /Users/liuzhiqin/.npm/_logs/2018-10-19T07_17_11_531Z-debug.log
處理scss
文件須要安裝sass-loader
和node-sass
$ npm install --save-dev sass-loader node-sass
安裝的那些開發依賴均可以在package.json中找到
"devDependencies": { "css-loader": "^1.0.0", "node-sass": "^4.9.4", "sass-loader": "^7.1.0", "style-loader": "^0.23.1", "webpack": "^3.6.0" }
修改webpack.config.js
配置
... module: { rules: [ ... {//處理scss test: /\.scss$/, use: ["style-loader","css-loader","sass-loader"]//簡化寫法 } ] } }
再次運行一下
$ npm start > webpack-practice@1.0.0 start /Users/liuzhiqin/Documents/study/webpack-practice > webpack Hash: 96acf3f989cacc7756fa Version: webpack 3.6.0 Time: 500ms Asset Size Chunks Chunk Names bundle.js 22.3 kB 0 [emitted] main [2] ./src/main.js 181 bytes {0} [built] [3] ./src/page.js 193 bytes {0} [built] [4] ./src/page.css 1.07 kB {0} [built] [5] ./node_modules/css-loader!./src/page.css 252 bytes {0} [built] [7] ./src/page.scss 1.2 kB {0} [built] [8] ./node_modules/css-loader!./node_modules/sass-loader/lib/loader.js!./src/page.scss 222 bytes {0} [built] + 3 hidden modules
頁面已經發生了變化
首先在src
中新件夾image
,用於存放原始圖片,而後隨便找張圖片放進去。webpack
處理圖片須要安裝url-loader
和file-loader
npm isntall --save-dev url-loader file-loader
配置webpack.config.js
,在module中加上處理圖片的規則
// webpack.config.js const path = require('path'); module.exports = { ... module: { rules: [ ... {//處理圖片 test: /.(jpg|jpeg|png|gif|svg)$/, use: ['url-loader?limit=8192&name=images/[name]-[hash:5].[ext]']//打包後放在images文件下,並加上哈希值命名 } ] } }
同時,在main.js中加引入圖片
// src/main.js import Page from './page'; import './page.css'; import './page.scss'; document.body.style.background = '#f7f7f7'; document.querySelector('#app').appendChild(Page()); let myImg = new Image(); myImg.src = require('./images/hand.jpg'); document.querySelector('#app').appendChild(myImg);
$ npm start > webpack-practice@1.0.0 start /Users/liuzhiqin/Documents/study/webpack-practice > webpack Hash: a286e8bbed5798e46b43 Version: webpack 3.6.0 Time: 383ms Asset Size Chunks Chunk Names images/hand-a729a.jpg 106 kB [emitted] bundle.js 22.6 kB 0 [emitted] main [2] ./src/main.js 299 bytes {0} [built] [3] ./src/page.js 193 bytes {0} [built] [4] ./src/page.css 1.07 kB {0} [built] [5] ./node_modules/css-loader!./src/page.css 252 bytes {0} [built] [7] ./src/page.scss 1.2 kB {0} [built] [8] ./node_modules/css-loader!./node_modules/sass-loader/lib/loader.js!./src/page.scss 222 bytes {0} [built] [9] ./src/images/hand.jpg 67 bytes {0} [built] + 3 hidden modules
咱們看到在dist
中生成了一個新的文件夾images
,打包後的圖片也在裏面,咱們看看頁面效果
webpack-dev-server
的使用通常咱們都是項目放到服務器上的,這樣咱們就能夠實現自動刷新頁面,webpack
也能夠起服務的,這時須要安裝webpack-dev-server
。
$ npm install --save-dev webpack-dev-server@2.9.1
安裝成功後,咱們須要對webpack
進行配置,這時就能夠放到服務器上運行了
// webpack.config.js const path = require('path'); module.exports = { entry: './src/main.js',//入口文件 output: { filename: 'bundle.js',//打包後輸出的文件名 path: path.resolve(__dirname, 'dist') //打包後文件存放的地方 }, ... devServer: { contentBase: './dist'//服務指向的根目錄 } }
執行代碼
$ ./node_modules/.bin/webpack-dev-server Project is running at http://localhost:8080/ webpack output is served from / Content not from webpack is served from ./dist Hash: 97287251caffe518e6c6 Version: webpack 3.6.0 Time: 976ms Asset Size Chunks Chunk Names images/hand-a729a.jpg 106 kB [emitted] bundle.js 348 kB 0 [emitted] [big] main [37] multi (webpack)-dev-server/client?http://localhost:8080 ./src/main.js 40 bytes {0} [built] [38] (webpack)-dev-server/client?http://localhost:8080 7.23 kB {0} [built] [39] ./node_modules/url/url.js 23.3 kB {0} [built] [45] ./node_modules/strip-ansi/index.js 161 bytes {0} [built] [46] ./node_modules/ansi-regex/index.js 135 bytes {0} [built] [47] ./node_modules/loglevel/lib/loglevel.js 7.86 kB {0} [built] [48] (webpack)-dev-server/client/socket.js 1.04 kB {0} [built] [80] (webpack)-dev-server/client/overlay.js 3.73 kB {0} [built] [85] (webpack)/hot nonrecursive ^\.\/log$ 170 bytes {0} [built] [87] (webpack)/hot/emitter.js 77 bytes {0} [built] [89] ./src/main.js 301 bytes {0} [built] [90] ./src/page.js 193 bytes {0} [built] [91] ./src/page.css 1.07 kB {0} [built] [94] ./src/page.scss 1.2 kB {0} [built] [96] ./src/images/hand.jpg 67 bytes {0} [built] + 82 hidden modules webpack: Compiled successfully.
在瀏覽器輸入localhost:8080
,中看看效果
這時咱們將背景改變一下,讓它變回粉色試試
// src/main.js import Page from './page'; import './page.css'; import './page.scss'; document.body.style.background = 'pink'; document.querySelector('#app').appendChild(Page()); let myImg = new Image(); myImg.src = require('./images/hand.jpg'); document.querySelector('#app').appendChild(myImg);
webpack會自動打包,而且頁面自動刷新,不再用手動刷新了。
在開發階段,通常都是在本地起個服務,執行npm run dev
就能運行。爲了效法vue
項目的目錄結構,在根目錄新建文件夾build
,並將webpack.config.js
移到其中,並將其重命名爲webpack.dev.conf.js
。在package.json
中加上
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "webpack", "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js" },
執行npm run dev
試試
$ npm run dev > webpack-practice@1.0.0 dev /Users/liuzhiqin/Documents/study/webpack-practice > webpack-dev-server --inline --progress --config build/webpack.dev.conf.js 10% building modules 1/1 modules 0 active Project is running at http://localhost:8080/ webpack output is served from / Content not from webpack is served from ./dist Hash: 53ee487180346d1f2264 Version: webpack 3.6.0 Time: 1244ms Asset Size Chunks Chunk Names images/hand-a729a.jpg 106 kB [emitted] bundle.js 348 kB 0 [emitted] [big] main [37] multi (webpack)-dev-server/client?http://localhost:8080 ./src/main.js 40 bytes {0} [built] [38] (webpack)-dev-server/client?http://localhost:8080 7.23 kB {0} [built] [39] ./node_modules/url/url.js 23.3 kB {0} [built] [45] ./node_modules/strip-ansi/index.js 161 bytes {0} [built] [46] ./node_modules/ansi-regex/index.js 135 bytes {0} [built] [47] ./node_modules/loglevel/lib/loglevel.js 7.86 kB {0} [built] [48] (webpack)-dev-server/client/socket.js 1.04 kB {0} [built] [80] (webpack)-dev-server/client/overlay.js 3.73 kB {0} [built] [85] (webpack)/hot nonrecursive ^\.\/log$ 170 bytes {0} [built] [87] (webpack)/hot/emitter.js 77 bytes {0} [built] [89] ./src/main.js 298 bytes {0} [built] [90] ./src/page.js 193 bytes {0} [built] [91] ./src/page.css 1.07 kB {0} [built] [94] ./src/page.scss 1.2 kB {0} [built] [96] ./src/images/hand.jpg 67 bytes {0} [built] + 82 hidden modules webpack: Compiled successfully. webpack: Compiling... Hash: 97287251caffe518e6c6 Version: webpack 3.6.0 Time: 108ms Asset Size Chunks Chunk Names bundle.js 348 kB 0 [emitted] [big] main + 1 hidden asset [85] (webpack)/hot nonrecursive ^\.\/log$ 170 bytes {0} [built] [89] ./src/main.js 301 bytes {0} [built] + 95 hidden modules webpack: Compiled successfully.
webpack
插件vue-cli
拉下來的vue
項目中,根目錄有個index.html
文件,這是個模板文件,用於生成dist
文件下面的index.html
文件,這就須要引入HtmlWebpackPlugin
插件
安裝HtmlWebpackPlugin
$ npm install --save-dev html-webpack-plugin npm WARN css-loader@1.0.0 requires a peer of webpack@^4.0.0 but none is installed. You must install peer dependencies yourself. npm WARN webpack-practice@1.0.0 No repository field. + html-webpack-plugin@3.2.0 added 38 packages from 57 contributors in 8.443s
在根目錄新建一個index.html
文件,裏面的代碼以下
<!-- index.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div id="app"></div> </body> </html>
再次執行npm run dev
,頁面一樣了成功顯示
$ npm run dev > webpack-practice@1.0.0 dev /Users/liuzhiqin/Documents/study/webpack-practice > webpack-dev-server --inline --progress --config build/webpack.dev.conf.js 10% building modules 1/1 modules 0 active Project is running at http://localhost:8080/ webpack output is served from / Content not from webpack is served from ./dist Hash: d6c1b4bbf4e88618a995 Version: webpack 3.6.0 Time: 1696ms Asset Size Chunks Chunk Names images/hand-a729a.jpg 106 kB [emitted] bundle.js 348 kB 0 [emitted] [big] main index.html 389 bytes [emitted] [37] multi (webpack)-dev-server/client?http://localhost:8080 ./src/main.js 40 bytes {0} [built] [38] (webpack)-dev-server/client?http://localhost:8080 7.23 kB {0} [built] [39] ./node_modules/url/url.js 23.3 kB {0} [built] [45] ./node_modules/strip-ansi/index.js 161 bytes {0} [built] [46] ./node_modules/ansi-regex/index.js 135 bytes {0} [built] [47] ./node_modules/loglevel/lib/loglevel.js 7.86 kB {0} [built] [48] (webpack)-dev-server/client/socket.js 1.04 kB {0} [built] [80] (webpack)-dev-server/client/overlay.js 3.73 kB {0} [built] [85] (webpack)/hot nonrecursive ^\.\/log$ 170 bytes {0} [built] [87] (webpack)/hot/emitter.js 77 bytes {0} [built] [89] ./src/main.js 301 bytes {0} [built] [90] ./src/page.js 193 bytes {0} [built] [91] ./src/page.css 1.07 kB {0} [built] [94] ./src/page.scss 1.2 kB {0} [built] [96] ./src/images/hand.jpg 67 bytes {0} [built] + 82 hidden modules Child html-webpack-plugin for "index.html": 1 asset [0] ./node_modules/html-webpack-plugin/lib/loader.js!./index.html 539 bytes {0} [built] [1] ./node_modules/lodash/lodash.js 540 kB {0} [built] [2] (webpack)/buildin/global.js 509 bytes {0} [built] [3] (webpack)/buildin/module.js 517 bytes {0} [built] webpack: Compiled successfully. webpack: Compiling... Hash: 7fd780016bdbd41a7a19 Version: webpack 3.6.0 Time: 87ms Asset Size Chunks Chunk Names index.html 353 bytes [emitted] + 2 hidden assets [85] (webpack)/hot nonrecursive ^\.\/log$ 170 bytes {0} [built] + 96 hidden modules Child html-webpack-plugin for "index.html": 1 asset [0] ./node_modules/html-webpack-plugin/lib/loader.js!./index.html 502 bytes {1} [built] + 3 hidden modules webpack: Compiled successfully. webpack: Compiling... Hash: c3c1881cc01ac3fc0696 Version: webpack 3.6.0 Time: 84ms Asset Size Chunks Chunk Names index.html 349 bytes [emitted] + 2 hidden assets [85] (webpack)/hot nonrecursive ^\.\/log$ 170 bytes {0} [built] + 96 hidden modules Child html-webpack-plugin for "index.html": 1 asset [0] ./node_modules/html-webpack-plugin/lib/loader.js!./index.html 498 bytes {0} [built] + 3 hidden modules webpack: Compiled successfully.
在模板文件中,沒有引入bundle.js文件,HtmlWebpackPlugin
會自動添加。
其實,能夠徹底將dist
文件夾刪掉,服務依然能正常運行,這是由於webpack-dev-server
會把打包好的數據存在內存中。如今目錄結構是
這就是爲何在開發階段時,只執行npm run dev
來啓動webpack-dev-server
,那時並無生成dist
文件夾,能夠正常開發,從內存中直接加載數據。部署時,在經過命令打包(通常是npm run build
)生成dist
,而後再講將打包好的dist
放到服務器上,再經過nginx
等web服務啓動。
部署打包
在build
文件下,新建webpack.prod.conf.js
,裏面的配置和webpack.dev.conf.js
很像,以下
// build/webpack.prod.conf.js const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/main.js',//入口文件 output: { filename: 'bundle.js',//打包後輸出的文件名 path: path.resolve(__dirname, '../dist'),//打包後文件存放的地方 }, ... devServer: { contentBase: './dist',//服務指向的根目錄 }, //webpack插件 plugins: [ new HtmlWebpackPlugin({ template: path.resolve(__dirname, '../index.html') }) ] }
並更新package.json
,加上build
命令,並將start
設置爲啓動dev
{ ... "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "npm run dev", "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "build": "NODE_ENV=production webpack --progress --config build/webpack.prod.conf.js" }, ... }
執行打包命令
$ npm run build > webpack-practice@1.0.0 build /Users/liuzhiqin/Documents/study/webpack-practice > NODE_ENV=production webpack --progress --config build/webpack.prod.conf.js Hash: 4dde899e11c579299335 Version: webpack 3.6.0 Time: 971ms Asset Size Chunks Chunk Names images/hand-a729a.jpg 106 kB [emitted] bundle.js 22.6 kB 0 [emitted] main index.html 349 bytes [emitted] [2] ./src/main.js 301 bytes {0} [built] [3] ./src/page.js 193 bytes {0} [built] [4] ./src/page.css 1.07 kB {0} [built] [5] ./node_modules/css-loader!./src/page.css 252 bytes {0} [built] [7] ./src/page.scss 1.2 kB {0} [built] [8] ./node_modules/css-loader!./node_modules/sass-loader/lib/loader.js!./src/page.scss 254 bytes {0} [built] [9] ./src/images/hand.jpg 67 bytes {0} [built] + 3 hidden modules Child html-webpack-plugin for "index.html": 1 asset [0] ./node_modules/html-webpack-plugin/lib/loader.js!./index.html 498 bytes {0} [built] [2] (webpack)/buildin/global.js 509 bytes {0} [built] [3] (webpack)/buildin/module.js 517 bytes {0} [built] + 1 hidden module
這時咱們的根目錄就會生成一個dist
文件
未完待續,菜鳥總結,但願能幫到其餘新手,大神請忽略,勿噴~