前端路由&webpack基礎(chǔ)配置詳解
1. SPA
SPA是單頁面應(yīng)用程序(single page application),通俗來講就是在一個頁面開發(fā)一個完整網(wǎng)站的功能
優(yōu)點(diǎn):
- 不需要跳轉(zhuǎn)頁面,局部更新頁面內(nèi)容
- 前端組件化
缺點(diǎn):
- 首屏加載慢(第一次訪問慢,按需加載)
- 開發(fā)復(fù)雜(所有的功能都在一個頁面完成,可使用webpack模塊化開發(fā))
- 不利于SEO搜索引擎優(yōu)化(使用服務(wù)端渲染)
2. 前端路由:
- 根據(jù)不用的URL標(biāo)識符渲染不同的組件(不同的網(wǎng)頁內(nèi)容)
- 路由實(shí)現(xiàn)原理:
- hash哈希(錨點(diǎn)) 通過hashchange監(jiān)聽URL標(biāo)識符改變,顯示不同的內(nèi)容
<ul> <li><a href="#login" rel="external nofollow" >魯班</a></li> <li><a href="#home" rel="external nofollow" >提莫</a></li> <li><a href="#list" rel="external nofollow" >劍姬</a></li> </ul> <div id="app"></div> <script> // 監(jiān)聽hash值的不用,讓頁面顯示不同的內(nèi)容 window.onhashchange = function() { let app = document.getElementById('app'); // 獲取hash值 let hash = location.hash.substr(1); // 根據(jù)標(biāo)識展現(xiàn)不同的內(nèi)容 局部更新 switch(hash) { case 'login': app.innerHTML = '托馬斯回旋...'; break; case 'home': app.innerHTML = '正在路上...'; break; case 'list': app.innerHTML = '華爾茲...'; break; } } </script>
3. 前端模塊化
- CommonJS
- 模塊導(dǎo)出
- module.exports
- exports
- 模塊導(dǎo)入
- require()
- 模塊導(dǎo)出
- ES6 Module
- 模塊導(dǎo)出
- export
- 模塊導(dǎo)入
- import
- 模塊導(dǎo)出
4. webpack基礎(chǔ)配置
初始化項(xiàng)目
npm init -y
安裝依賴包
npm install webpack -D npm install webpack-cli -D
通過webpack命令打包文件: 模塊化轉(zhuǎn)換,代碼壓縮合并
webpack.config.js
const path = require('path'); // 下包并導(dǎo)入插件 npm i html-webpack-plugin -D const HtmlWebpackPlugin = require('html-webpack-plugin'); // npm i clean-webpack-plugin -D 清除目錄中的內(nèi)容 const { CleanWebpackPlugin } = require('clean-webpack-plugin'); module.exports = { // 配置打包選項(xiàng) development開發(fā)環(huán)境 mode: 'development', // production 生產(chǎn)環(huán)境 // 指定入口文件:要打包的文件 entry: './src/js/index.js', // 指定輸出文件:打包之后的文件 output: { path: path.resolve(__dirname, 'dist'), filename: 'main.min.js' }, // 配置資源的加載器 loader module: { rules: [ // 配置js的加載器(把ES6轉(zhuǎn)化為ES3/5代碼) { test: /\.jsx?$/, loader: 'babel-loader', //打包除這個文件之外的文件 exclude: path.join(__dirname, './node_modules'), //打包包括的文件 include: path.join(__dirname, './src') }, // 配置css的加載器 { // 匹配.css結(jié)尾的文件 test: /\.css$/, // 配置css文件的加載器,處理順序:從右向左 use: ['style-loader', 'css-loader'] }, // 配置less的加載器 { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] } ] }, // 配置插件 plugins: [ new CleanWebpackPlugin(), // 動態(tài)生成html new HtmlWebpackPlugin({ title: '測試標(biāo)題', template: 'index.html' }) ], // 配置實(shí)時預(yù)覽環(huán)境 devServer: { contentBase: path.join(__dirname, 'dist'), port: 5000 } }
package.json文件配置
"scripts": { "dev": "npx webpack-dev-server --open" }
5 .判斷如何配置webpack
- 指定源文件加入到構(gòu)建流程中被webpack控制, 配置entry
- 指定輸出文件的位置和名稱,配置output
- 自定義解析和轉(zhuǎn)換文件,配置module,通常是配置module.rules里的 Loader。(資源加載器)
- 配置插件通過plugins進(jìn)行配置
- 尋找依賴模塊時,配置resolve
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js?剪切、復(fù)制、粘貼功能實(shí)現(xiàn)
Navigator.clipboard?API可以用來訪問系統(tǒng)剪貼板,可以實(shí)現(xiàn)【剪切、復(fù)制、粘貼】功能。該?API?被設(shè)計(jì)用來取代使用?document.execCommand()?的剪貼板訪問方式,不兼容?IE2023-05-05JavaScript實(shí)現(xiàn)的in_array函數(shù)
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的in_array函數(shù),用于判斷一個值是否在數(shù)組中,類似PHP的in_array函數(shù),需要的朋友可以參考下2014-08-08JavaScript校驗(yàn)Number(4,1)格式的數(shù)字實(shí)例代碼
這篇文章主要介紹了JavaScript校驗(yàn)Number(4,1)格式的數(shù)字實(shí)例代碼,本文實(shí)現(xiàn)思路明確代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03詳解微信小程序的不同函數(shù)調(diào)用的幾種方法
這篇文章主要介紹了微信小程序的不同函數(shù)調(diào)用的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05js 右側(cè)浮動層效果實(shí)現(xiàn)代碼(跟隨滾動)
因?yàn)轫?xiàng)目上有這樣的需求,在網(wǎng)上也查了些東西,之前是想找個差不多類似的套用一下。后來發(fā)覺沒有合適的,因時間緊迫就自己動手寫了一個簡單的 ,示例代碼如下 兼容火狐和IE7+2015-11-11解決前后端交互數(shù)據(jù)出現(xiàn)精度丟失的多種方式
這篇文章主要為大家介紹了解決前后端交互數(shù)據(jù)出現(xiàn)精度丟失的多種方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04webpack中splitChunks分包策略的實(shí)現(xiàn)
splitChunks是 webpack 中用于分包的配置選項(xiàng)之一,本文主要介紹了webpack中splitChunks分包策略的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-06-06