一、基礎篇
1.全域性安裝和本地安裝的區別
-
安裝位置不同
全域性安裝:安裝在電腦的全域性環境中。注:可通過
npm root -g
檢視全域性安裝目錄本地安裝:安裝在當前專案中並且在當前專案中目錄下的
package.json
檔案中的devDependencies
或者dependencies
中記錄安裝包的版本資訊 -
呼叫方式不同
全域性安裝:全域性安裝後可以供命令列使用,開發者可以在命令列中直接執行該元件包支援的命令
本地安裝:本地安裝後可以使用
require
、import
等方式引入專案中的node_modules
下的檔案
2.開發依賴於專案依賴的區別
-
開發依賴:
package.json
檔案中devDependencies
記錄的依賴;只用於開發環境,打包上線不需要,比如webpack
、glup
等這些工具都只是在開發階段需要,一旦專案投入真正的使用便不依賴這些外掛 -
專案依賴:
package.json
檔案中dependencies
記錄的依賴;專案投入真正使用的時候仍然需要依賴的外掛,比如react
、react-dom
、react-router-dom
、jquery
等,一旦dependencies
中沒有這些外掛,專案投入使用的時候就會報錯 -
注:npm 安裝的時候給我們提供的三種方式
npm install packagename
:將外掛安裝在專案中但不會在package.json
檔案中寫入npm install packagename --save
:將外掛安裝在專案中,並在package.json
檔案的dependencies
中記錄npm install packagename --save -dev
:將外掛安裝在專案中,並在package.json
檔案的devDependencies
中記錄
3.使用webapck4
需要安裝的模組
webpack
webpack-cli
4.webpack
預設配置的名字檔案的名字(兩種)
webpack.config.js
webpackfile.js
5.webpack
打包的結果為什麼可以在瀏覽器中執行
webapck
使用commonJS
規範,其在內部實現了一個require
方法
6.webpack
的模式(mode)及其作用
development
:開發模式,可以看到打包後的結果,不會進行壓縮和優化操作production
:生產模式,會壓縮檔案進行優化
7.實現執行命令指令碼在package.json
中的配置
<!--package.json-->
"script": {
"dev": "webpack-server-dev",
"build": "webpack"
}
複製程式碼
8.實現簡單的開發伺服器配置
<!--webpack.config.js-->
devServer: {
port: 3000, // 埠號
progress: true, // 進度條
contentBase: './build', // 指定伺服器指向的資料夾
compress: true, // 使用Gzip壓縮
open: ture // 自動開啟瀏覽器
}
複製程式碼
9.實現壓縮產生的html
檔案
使用
html-webpack-plugin
外掛 (npm i html-webpack-plugin --save -dev
)
<!--webpack.config.js-->
const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname,'build')
},
plugins:[
new HtmlWebpackPlugin({
template: './src/index.html', // 傳入模板的路徑
filename: 'index.html', // 打包後的檔名
minify:{ // 壓縮配置
removeAttributeQuotes: true, // 刪除屬性的雙引號
collapseWhitespace: true, // 摺疊空行
}
})
]
}
複製程式碼
10.解決打包後的快取問題
- 配置
hash: true
plugins:[
new HtmlWebpackPlugin({
template: './src/index.html',
minify: {
...
},
hash: true //加入雜湊戳引入
})
]
複製程式碼
11.webapck
中loader
的做什麼的
- 用來載入處理各種形式的資源,用於對模組的原始碼進行轉換
12.css-loader
&&style-loader
的作用
css-loader
:用於處理css
檔案中的@import
解析路徑,將css
轉換為commonJS
模組style-loader
:用於將處理好的css
樣式插入到打包後的html
檔案中,預設插到最後。若我們想通過我們寫的樣式覆蓋掉打包後的樣式,譬如我們的元件開發同學需要做如下配置
<!--webpack.config.js-->
module: {
rules: [
{
test: /\.css$/,
use: [
{
loader: 'style-loader',
options: {
insertAt: 'top'
}
}
]
}
]
}
複製程式碼
13.loader
的特點
- 簡單,責任單一、鏈式,可以鏈式呼叫、保證輸出的結果是一個模組
14.loader
有幾種寫法
- 字串、陣列、物件
15.loader
預設的執行順序
- 從右到左,從下到上
16.使用loader
如何傳遞引數
- 通過
options
物件
17.常見的css
前處理器及其對應的loader
less
--->less-loader
sass
--->sass-loader
、node-sass
stylus
--->stylus-loader
18.實現css
樣式抽離
- 通過
mini-css-extract-plugin
外掛,並將style-loader
替換為MiniCssExtractPlugin.loader
<!--webpack.config.js-->
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
plugins:[
new MiniCssExtractPlugin({
filename: 'main.css' // 抽離後的檔名
})
],
module:{
rules: [
{
test: /\.css$/,
use: [
{
loader: MiniCssExtractPlugin.loader
}
]
}
]
}
複製程式碼
19.實現抽離後的css
樣式檔案壓縮
- 使用
optimize-css-assets-webpack-plugin
<!--webpack.config.js-->
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin');
module.exports = {
mode: 'development',
optimization: {
minimizer: [
new OptimizeCssAssetsWebpackPlugin()
]
}
}
複製程式碼
20.實現自動新增瀏覽器字首
- 使用
postcss-loader
配合autoprefixer
使用;需要有一個單獨的postcss.config.js
檔案
<!--postcss.config.js-->
module.exports = {
plugins: [require('autoprefixer')]
}
<!--webpack.config.js-->
module.exports = {
mode: 'development',
ertry: './src/index.js',
output: {
...
},
optimization: {
...
},
module: {
rules: [
{
test: /\.css$/,
use: [
...,
'postcss-loader'
]
}
]
}
}
複製程式碼
21.壓縮js
檔案需要的外掛
uglifyjs-webpack-plugin
外掛
<!--webpack.config.js-->
const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin')
module.exports = {
...,
optimization: {
minimizer: [
new UglifyjsWebpackPlugin({
cache: true, //使用快取
parallel: true, // 使用併發打包
sourceMap: true // 使用原始碼對映
})
]
}
}
複製程式碼