Webpact學習筆記記錄
- 一.初始化項目
- 1.生成package.json
- 2.安裝webpack
- 3.執行webpack體驗
- 二、webpack的配置文件
- 三、less-loader解析less
- 1.安裝loader
- 2.配置
- 四、eslint-loader語法檢查
- 1.安裝loader
- 2.配置loader
- 3.在package.json中加入
- 五、js語法轉換
- 1.安裝loader
- 2.配置loader
- 六、js兼容性處理
- 1. 第一種方法:使用polyfill
- 2. 第二種方法:借助按需引入core-js
- 七、url-loader解析樣式中的圖片
- 1.安裝loader
- 2.配置loader
- 八、打包html文件
- 1.安裝插件
- 2.配置插件
- 九、打包html中圖片資源
- 1.安裝loader
- 2.配置loader
- 3.執行webpack命令即可
- 十、打包其他資源
- 1.使用file-loader處理即可,file-loader前面已經下載過
- 十一、自動編譯打包運行
- 1.安裝loader
- 2.修改webpack配置
- 3.package.json中修改如下
- 十一、開啟熱模替換
- 十二、devtool映射技術
- 十三、清除打包文件目錄
- 1.安裝插件
- 2.配置與引用插件
- 十四、提取css成單獨的文件
- 1.安裝插件
- 2.引入插件
- 3.配置loader
- 十五、css文件的兼容性處理
- 1.安裝
- 2.配置
- 十六、壓縮css
- 1.安裝插件
- 2.引入插件
- 3.配置插件
- 十七、壓縮html
- 十八、完整的package.json依賴如下
聲明:以下筆記內容均摘自Webpack+react全家桶開發谷粒后臺項目 ~張天禹老師的講課視頻,僅供學習使用
這個項目比較舊,因此以下的的安裝都加上了版本號,以免新版本不兼容影響學習,如果不加上版本號會有不一樣的表現,也可能出錯~。
一.初始化項目
1.生成package.json
npm init
2.安裝webpack
yarn add webpack@^4.41.2 webpack-cli@^3.3.10
3.執行webpack體驗
webpack ./src/js/index.js -o ./dist/js/index.js --mode development
$ webpack ./src/js/index.js -o ./dist/js/index.js --mode development
asset main.js 6.53 KiB [emitted] (name: main)
runtime modules 670 bytes 3 modules
cacheable modules 1.09 KiB./src/js/index.js 446 bytes [built] [code generated]./src/js/module1.js 273 bytes [built] [code generated]./src/js/module2.js 109 bytes [built] [code generated]./src/js/module3.js 288 bytes [built] [code generated]
webpack 5.88.2 compiled successfully in 118 ms
二、webpack的配置文件
在webpack_test下建一個webpack.config.js
/*** 此文件是webpack的配置文件,用于指定webpack去執行哪些任務*/const resolve = require('path').resolve;module.exports = {// 指定入口文件entry: './src/js/index.js',// 指定輸出文件output: {path: resolve(__dirname, 'dist'), // 輸出文件的路徑filename: 'js/index.js' // 輸出文件的名稱},// 模式mode: 'development' // development production 配置工作模式
};
直接執行命令webpack
回車進行測試,使用配置文件進行構建
三、less-loader解析less
1.安裝loader
yarn add css-loader@^3.2.0 style-loader@^1.0.1 less-loader@^5.0.0 less@^3.10.3
2.配置
// 指定loader,loader是用于加載某些文件的module: {rules: [// 指定loader規則{test: /\.less$/, // 匹配所有的less文件use: [// 指定使用哪些loader'style-loader', // 用于將css代碼,以style標簽的形式添加到頁面中'css-loader', // 用于將css文件加載到js中'less-loader' // 用于將less文件轉為css文件]}]}
執行webpack測試
四、eslint-loader語法檢查
對js基本語法錯誤進行提前檢查
1.安裝loader
yarn add eslint-loader@^4.0.2 eslint@^7.32.0
2.配置loader
webpack.config.js中加入以下
// js語法檢查{test: /\.js$/,exclude: /node_modules/, // 排除node_modules文件夾loader: 'eslint-loader', // 指定使用的loaderenforce: 'pre', // 指定loader的執行順序,pre表示優先執行options: { // 指定eslint-loader的配置// eslint options (if necessary)}}
3.在package.json中加入
"eslintConfig": {"parserOptions": {"ecmaVersion": 6,"sourceType": "module"},"env": {"browser": true,"node": true},"globals": {"$": "readonly"},"rules": {"no-console": 0,"eqeqeq": 2,"no-alert": 2},"extends": "eslint:recommended"}
以上配置參考了https://blog.csdn.net/qq_41040989/article/details/128924218
“eslintConfig”: {
“parserOptions”: {
“ecmaVersion”: 6, // 支持es6
“sourceType”: “module” // 使用es6模塊化
},
“env”: { // 設置環境
“browser”: true, // 支持瀏覽器環境: 能夠使用window上的全局變量
“node”: true // 支持服務器環境: 能夠使用node上global的全局變量
},
“globals”: { // 聲明使用的全局變量, 這樣即使沒有定義也不會報錯了
“$”: “readonly” // $ 只讀變量
},
“rules”: { // eslint檢查的規則 0 忽略 1 警告 2 錯誤
“no-console”: 0, // 不檢查console
“eqeqeq”: 2, // 用而不用=就報錯
“no-alert”: 2 // 不能使用alert
},
“extends”: “eslint:recommended” // 使用eslint推薦的默認規則 https://cn.eslint.org/docs/rules/
},
最后執行webpack
測試
五、js語法轉換
1.安裝loader
yarn add babel-loader@^8.0.6 @babel/core@^7.7.2 @babel/preset-env@^7.7.1
2.配置loader
// js語法轉換{test: /\.js$/,exclude: /node_modules/, // 排除node_modules文件夾use: {loader: 'babel-loader', // 指定使用的loaderoptions: { // 指定babel-loader的配置presets: ['@babel/preset-env']}}}
六、js兼容性處理
1. 第一種方法:使用polyfill
#安裝
yarn add @babel/polyfill@^7.7.0
使用: 在App.js或index.js中引用
import '@babel/polyfill'; // 引入babel-polyfill,用于兼容ie瀏覽器
缺點:體積太大。
2. 第二種方法:借助按需引入core-js
安裝:
yarn add core-js@^3.4.1
配置loader
// js語法轉換{test: /\.js$/,exclude: /node_modules/, // 排除node_modules文件夾use: {loader: 'babel-loader', // 指定使用的loaderoptions: { // 指定babel-loader的配置presets: [['@babel/preset-env',{useBuiltIns: 'usage', // 按需引入需要使用polyfillcorejs: { version: 3 }, // 指定core-js的版本targets: { // 指定兼容到哪個版本的瀏覽器chrome: '58',ie: '9',}}],],cacheDirectory: true // 開啟babel緩存}}}
七、url-loader解析樣式中的圖片
1.安裝loader
yarn add file-loader@^4.2.0 url-loader@^2.2.0
2.配置loader
// 處理圖片, url-loader,可以將圖片轉為base64處理{test: /\.(png|jpg|gif)$/,use: [{loader: 'url-loader', // 指定使用的loaderoptions: {limit: 1024 * 10, // 8 * 1024 = 8kb 以下的圖片會被base64處理outputPath: 'images', // 指定輸出的目錄publicPath: '../dist/images', // 指定圖片的公共路徑name: '[hash:5].[ext]' // 指定輸出的文件名}}]}
八、打包html文件
html不再主動引入js了,由webpack自動打包引入
如需要將以下的<script src="../dist/js/index.js"></script>
取消引入,然后由插件打包進去
<head><meta charset="UTF-8"><title>Webpack_test</title><script src="../dist/js/index.js"></script>
</head>
1.安裝插件
yarn add html-webpack-plugin@^4.5.0
2.配置插件
const HtmlWebpackPlugin = require('html-webpack-plugin');// 配置插件plugins: [// 用于將指定的html文件,移動到輸出目錄,并且自動引入打包后的js文件new HtmlWebpackPlugin({template: './src/index.html' // 指定要移動的html文件})]
九、打包html中圖片資源
url-loader和file-loader只能處理js中的圖片資源,要處理件中的圖片資源,需要使用html-loader。
1.安裝loader
yarn add html-loader@^0.5.5
2.配置loader
// 處理html中的圖片{test: /\.html$/,use: [{loader: 'html-loader', // 指定使用的loaderoptions: {esModule: false // 指定html-loader不使用es6模塊化解析}}]}
3.執行webpack命令即可
十、打包其他資源
1.使用file-loader處理即可,file-loader前面已經下載過
// 使用file-loader處理字體文件和其他文件{test: /\.(eot|svg|ttf|woff|woff2|mp3|mp3|avi)$/,loader: 'file-loader', // 指定使用的loaderoptions: {outputPath: 'media', // 指定輸出的目錄name: '[hash:5].[ext]' // 指定輸出的文件名}}
十一、自動編譯打包運行
1.安裝loader
yarn add webpack-dev-server@^3.9.0
2.修改webpack配置
// 配置開發服務器devServer: {compress: true, // 啟動gzip壓縮port: 3000, // 指定端口號open: true, // 自動打開瀏覽器}
3.package.json中修改如下
"scripts": {"start": "webpack-dev-server",},
十一、開啟熱模替換
hot: true
,package.json中增加此配置
devServer: {compress: true, // 啟動gzip壓縮port: 3000, // 指定端口號open: true, // 自動打開瀏覽器hot: true, // 開啟熱更新}
入口配置修改如下
entry: ['./src/js/index.js', './src/index.html'],
十二、devtool映射技術
在webpack.config.js中加入以下配置即可
devtool: 'cheap-module-eval-source-map' // 開發環境下使用// devtool: 'cheap-module-source-map' // 生產環境下使用
十三、清除打包文件目錄
通過插件自動刪除上一次的打包文件
1.安裝插件
yarn add clean-webpack-plugin@^3.0.0
2.配置與引用插件
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
// 配置插件plugins: [// 用于清除指定目錄的文件new CleanWebpackPlugin()],
十四、提取css成單獨的文件
1.安裝插件
yarn add mini-css-extract-plugin@^0.8.0
2.引入插件
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // 用于將css代碼提取為單獨的文件
3.配置loader
{test: /\.less$/, // 指定匹配的文件// 指定使用的loaderuse: [MiniCssExtractPlugin.loader,'css-loader', // 用于將css文件加載到js中'less-loader' // 用于將less文件轉為css文件]}
十五、css文件的兼容性處理
1.安裝
yarn add postcss-loader@^3.0.0 postcss-flexbugs-fixes@^4.1.0 postcss-preset-env@^6.7.0 postcss-normalize@^8.0.1
2.配置
{loader: 'postcss-loader', // 用于給css代碼自動添加兼容性前綴options: {postcssOptions: {plugins: () => [require('postcss-flexbugs-fixs'),require('postcss-preset-env')({autoprefixer: {flexbox: 'no-2009'},stage: 3})],sourceMap: true}}},
在src目錄下增加.browserslistrc文件:
# Browsers that we supportlast 1 version
> 1%
IE 10 # sorry
十六、壓縮css
1.安裝插件
yarn add optimize-css-assets-webpack-plugin@^5.0.3
2.引入插件
const optimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin'); // 用于壓縮css代碼
3.配置插件
// 用于壓縮css代碼new optimizeCssAssetsWebpackPlugin({cssProcessorPluginOptions: {presets: ['default', { discardComments: { removeAll: true } }]},cssProcessorOptions: {map: {inline: false, // 不生成內聯映射,這樣配置就會生成一個source-map文件annotation: true // 如果沒有源映射,就會生成一個注釋}}})
十七、壓縮html
在插件HtmlWebpackPlugin
中加入以下配置即可
new HtmlWebpackPlugin({template: './src/index.html', // 指定要移動的html文件minify: { // 配置html壓縮removeComments: true, // 移除注釋collapseWhitespace: true, // 移除空格removeRedundantAttributes: true, // 移除多余的屬性useShortDoctype: true, // 使用短的文檔聲明removeEmptyAttributes: true, // 移除空的屬性removeStyleLinkTypeAttributes: true, // 移除style和link標簽的type屬性keepClosingSlash: true, // 保留閉合斜線minifyJS: true, // 壓縮內聯js代碼minifyCSS: true, // 壓縮內聯css代碼minifyURLs: true, // 壓縮內聯的url}})
十八、完整的package.json依賴如下
"dependencies": {"@babel/core": "7.7.2","@babel/polyfill": "7.7.0","@babel/preset-env": "7.7.1","babel-loader": "8.0.6","clean-webpack-plugin": "^3.0.0","core-js": "3.4.1","css-loader": "3.2.0","eslint": "7.32.0","eslint-loader": "4.0.2","file-loader": "4.2.0","html-loader": "0.5.5","html-webpack-plugin": "4.5.0","less": "3.10.3","less-loader": "5.0.0","mini-css-extract-plugin": "^0.8.0","optimize-css-assets-webpack-plugin": "^5.0.3","postcss-flexbugs-fixes": "^4.1.0","postcss-loader": "^3.0.0","postcss-normalize": "^8.0.1","postcss-preset-env": "^6.7.0","style-loader": "1.0.1","url-loader": "2.2.0","webpack": "4.41.2","webpack-cli": "3.3.10","webpack-dev-server": "3.9.0"}