前端路由&webpack基础配置详解


Posted in Javascript onJune 10, 2019

1. SPA

SPA是单页面应用程序(single page application),通俗来讲就是在一个页面开发一个完整网站的功能

优点:

  • 不需要跳转页面,局部更新页面内容
  • 前端组件化

缺点:

  • 首屏加载慢(第一次访问慢,按需加载)
  • 开发复杂(所有的功能都在一个页面完成,可使用webpack模块化开发)
  • 不利于SEO搜索引擎优化(使用服务端渲染)

2. 前端路由:

  • 根据不用的URL标识符渲染不同的组件(不同的网页内容)
  • 路由实现原理:
    • hash哈希(锚点) 通过hashchange监听URL标识符改变,显示不同的内容
<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>
// 监听hash值的不用,让页面显示不同的内容
window.onhashchange = function() {
  let app = document.getElementById('app');
  // 获取hash值
  let hash = location.hash.substr(1);
  // 根据标识展现不同的内容 局部更新
  switch(hash) {
    case 'login':
      app.innerHTML = '托马斯回旋...';  
      break;
    case 'home':
      app.innerHTML = '正在路上...';
      break;
    case 'list':
      app.innerHTML = '华尔兹...';
      break;
    }
  }
</script>

3. 前端模块化

  • CommonJS
    • 模块导出
      • module.exports
      • exports
    • 模块导入
      • require()
  • ES6 Module
    • 模块导出
      • export
    • 模块导入
      • import

4. webpack基础配置

初始化项目

npm init -y

安装依赖包

npm install webpack -D

npm install webpack-cli -D

通过webpack命令打包文件: 模块化转换,代码压缩合并

webpack.config.js

const path = require('path');
// 下包并导入插件 npm i html-webpack-plugin -D
const HtmlWebpackPlugin = require('html-webpack-plugin');
// npm i clean-webpack-plugin -D 清除目录中的内容
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
// 配置打包选项 development开发环境
mode: 'development', // production 生产环境
// 指定入口文件:要打包的文件
entry: './src/js/index.js',
// 指定输出文件:打包之后的文件
output: {
  path: path.resolve(__dirname, 'dist'),
  filename: 'main.min.js'
},
// 配置资源的加载器 loader
module: {
  rules: [
  // 配置js的加载器(把ES6转化为ES3/5代码)
  {
    test: /\.jsx?$/,
    loader: 'babel-loader',
    //打包除这个文件之外的文件
    exclude: path.join(__dirname, './node_modules'),
    //打包包括的文件
    include: path.join(__dirname, './src')
  },
  // 配置css的加载器
  {
    // 匹配.css结尾的文件
    test: /\.css$/,
    // 配置css文件的加载器,处理顺序:从右向左
    use: ['style-loader', 'css-loader']
  },
  // 配置less的加载器
  {
    test: /\.less$/,
    use: ['style-loader', 'css-loader', 'less-loader']
  }
  ]
},
// 配置插件
plugins: [
  new CleanWebpackPlugin(),
  // 动态生成html
  new HtmlWebpackPlugin({
  title: '测试标题',
  template: 'index.html'
  })
],
// 配置实时预览环境 
devServer: {
  contentBase: path.join(__dirname, 'dist'),
  port: 5000
}
}

package.json文件配置

"scripts": {
  "dev": "npx webpack-dev-server --open"
}

5 .判断如何配置webpack

  • 指定源文件加入到构建流程中被webpack控制, 配置entry
  • 指定输出文件的位置和名称,配置output
  • 自定义解析和转换文件,配置module,通常是配置module.rules里的 Loader。(资源加载器)
  • 配置插件通过plugins进行配置
  • 寻找依赖模块时,配置resolve

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery实现无限分级横向导航菜单的方法
Mar 12 Javascript
jQuery制作效果超棒的手风琴折叠菜单
Apr 03 Javascript
JS Array创建及concat()split()slice()的使用方法
Jun 03 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
Jun 07 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
Oct 25 Javascript
详解vue.js移动端导航navigationbar的封装
Jul 05 Javascript
详解vue 数据传递的方法
Apr 19 Javascript
详解vue-router传参的两种方式
Sep 10 Javascript
zepto.js 实时监听输入框的方法
Dec 04 Javascript
es6基础学习之解构赋值
Dec 10 Javascript
一个因@click.stop引发的bug的解决
Jan 08 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
Dec 22 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
Jun 10 #Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
Jun 10 #Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
Jun 10 #Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
Jun 10 #Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
Jun 10 #jQuery
利用Electron简单撸一个Markdown编辑器的方法
Jun 10 #Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
Jun 10 #Javascript
You might like
PHP个人网站架设连环讲(三)
2006/10/09 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
初识Node.js
2015/03/20 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python性能优化技巧
2015/03/09 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
Python龙贝格法求积分实例
2020/02/29 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
财务会计毕业生个人求职信
2014/02/03 职场文书
残疾人小组计划书
2014/04/27 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
羽毛球社团活动总结
2014/06/27 职场文书
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python
Python IO文件管理的具体使用
2022/03/20 Python
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
2022/04/11 PHP