前端路由&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 相关文章推荐
mapper--图片热点区域高亮组件官方站点
Dec 22 Javascript
javaScript checkbox 全选/反选及批量删除
Apr 28 Javascript
jquery prop的使用介绍及与attr的区别
Dec 19 Javascript
JavaScript基础函数整理汇总
Jan 30 Javascript
js实现网页多级级联菜单代码
Aug 20 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
Jan 23 Javascript
详解JavaScript RegExp对象
Feb 04 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
Jul 26 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
Feb 02 jQuery
javascript与PHP动态往类中添加方法对比
Mar 21 Javascript
JS实现的base64加密解密操作示例
Apr 18 Javascript
vuex如何重置所有state(可定制)
Jan 17 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的ASCII码转换类
2013/07/05 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
分享PHP守护进程类
2015/12/30 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
浅谈js中的闭包
2015/03/16 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
python异步任务队列示例
2014/04/01 Python
python简单实现计算过期时间的方法
2015/06/09 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
Python中内建函数的简单用法说明
2016/05/05 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
Volcom法国官网:美国冲浪滑板品牌
2017/05/25 全球购物
西班牙英格列斯百货法国官网:El Corte Inglés法国
2017/07/09 全球购物
Petmate品牌官方网站:宠物用品
2018/11/25 全球购物
党章学习思想汇报
2014/01/14 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
刑事辩护词范文
2015/05/21 职场文书
2015年高中语文教学总结
2015/08/18 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
签证扫盲贴,41个常见签证知识,需要的拿走
2019/08/09 职场文书
Nginx进程调度问题详解
2021/09/25 Servers