前端路由&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插件制作 学习过程及实例
Apr 25 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
Feb 11 Javascript
jQuery中;function($,undefined) 前面的分号的用处
Dec 17 Javascript
jquery 表单验证之通过 class验证表单不为空
Nov 02 Javascript
AngularJS基础 ng-show 指令简单示例
Aug 03 Javascript
jQuery 生成svg矢量二维码
Aug 09 Javascript
vue2的todolist入门小项目的详细解析
May 11 Javascript
微信小程序url与token设置详解
Sep 26 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
Dec 14 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
Apr 11 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
May 16 Javascript
解决vant的Toast组件时提示not defined的问题
Nov 11 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
IP138 IP地址查询小偷实现代码
2010/02/15 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
Firefox和IE浏览器兼容JS脚本写法小结
2008/07/07 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
javascript作用域问题实例分析
2015/07/13 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
JavaScript进阶(一)变量声明提升实例分析
2020/05/09 Javascript
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
Python中apply函数的用法实例教程
2014/07/31 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
新书吧创业计划书
2014/01/31 职场文书
实习单位评语
2014/04/26 职场文书
学习雷锋活动总结
2014/04/29 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
党支部特色活动方案
2014/08/20 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
护士辞职信怎么写
2015/02/27 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
求职信如何撰写?
2019/05/22 职场文书
Python进程间的通信之语法学习
2022/04/11 Python
MySQL数据库简介与基本操作
2022/05/30 MySQL