前端路由&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 Lightbox 图片展示插件使用说明
Apr 25 Javascript
js 图片等比例缩放代码
May 13 Javascript
基于jquery的direction图片渐变动画效果
May 24 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
Dec 13 Javascript
关于图片的预加载过程中隐藏未知的
Dec 19 Javascript
ExtJS如何设置与获取radio控件的选取状态
Jan 22 Javascript
js函数参数设置默认值的一种变通实现方法
May 26 Javascript
JavaScript Promise启示录
Aug 12 Javascript
基于jQuery实现的QQ表情插件
Aug 25 Javascript
js实现的Easy Tabs选项卡用法实例
Sep 06 Javascript
详解在 Angular 项目中添加 clean-blog 模板
Jul 04 Javascript
jQuery编写QQ简易聊天框
Aug 27 jQuery
在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/11/23 PHP
PHP Ajax中文乱码问题解决方法
2009/02/27 PHP
PHP教程 预定义变量
2009/10/23 PHP
PHP的简易冒泡法代码分享
2012/08/28 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
JQuery实现可直接编辑的表格
2015/04/16 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
详解js中==与===的区别
2017/01/08 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
[48:21]林俊杰圣堂刺客超神杀戮秀
2014/10/29 DOTA
Python 错误和异常代码详解
2018/01/29 Python
详解python中的线程
2018/02/10 Python
解析Python的缩进规则的使用
2019/01/16 Python
python数据爬下来保存的位置
2020/02/17 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
建筑学推荐信
2013/11/03 职场文书
学生党员思想汇报
2013/12/28 职场文书
产品生产计划书
2014/05/07 职场文书
导游欢迎词范文
2015/01/23 职场文书
手机销售员岗位职责
2015/04/11 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
2019教师的学习计划
2019/06/25 职场文书
浅谈mysql返回Boolean类型的几种情况
2021/06/04 MySQL