前端路由&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 相关文章推荐
js的event详解。
Sep 06 Javascript
Windows Live的@live.com域名注册漏洞 利用代码
Dec 27 Javascript
jQuery :nth-child前有无空格的区别分析
Jul 11 Javascript
JS获取鼠标坐标的实例方法
Jul 18 Javascript
禁止页面刷新让F5快捷键及右键都无效
Jan 22 Javascript
javascript使用正则表达式实现去掉空格之后的字符
Feb 15 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
Nov 25 Javascript
聊一聊JS中的prototype
Sep 29 Javascript
vue与原生app的对接交互的方法(混合开发)
Nov 28 Javascript
Javascript之高级数组API的使用实例
Mar 08 Javascript
Vue项目中如何使用Axios封装http请求详解
Oct 23 Javascript
基于js实现的图片拖拽排序源码实例
Nov 04 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遍历数组的方法汇总
2015/04/30 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
vuex 的简单使用
2018/03/22 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
Promise.all中对于reject的处理方法
2018/08/01 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
vue-resource 拦截器interceptors使用详解
2021/01/18 Vue.js
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
Python3读取zip文件信息的方法
2015/05/22 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
电子信息专业自荐书
2014/02/04 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
消防演习通知
2015/04/25 职场文书
思想工作总结范文
2015/08/12 职场文书
公司转让协议书
2016/03/19 职场文书