前端路由&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 相关文章推荐
触屏中的JavaScript事件分析
Feb 06 Javascript
javascript中setInterval的用法
Jul 19 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
Dec 04 Javascript
jQuery插件imgPreviewQs实现上传图片预览
Jan 15 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
JS导出PDF插件的方法(支持中文、图片使用路径)
Jul 12 Javascript
基于Bootstrap仿淘宝分页控件实现代码
Nov 07 Javascript
微信小程序教程系列之新建页面(4)
Apr 17 Javascript
原生JS+Canvas实现五子棋游戏实例
Jun 19 Javascript
jQuery中复合选择器简单用法示例
Mar 31 jQuery
layDate日期控件使用方法详解
Nov 15 Javascript
JS实现可用滑块滑动的缓动图代码
Sep 01 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数学运算
2011/12/30 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
mpvue小程序循环动画开启暂停的实现方法
2019/05/15 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
会计电算化专业应届大学生求职信
2013/10/22 职场文书
师范大学应届生求职信
2013/11/21 职场文书
大学生水果店创业计划书
2014/01/28 职场文书
房地产项目策划书
2014/02/05 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
新党章心得体会
2014/09/04 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
协议书范文
2015/01/27 职场文书
中英文求职信范文
2015/03/19 职场文书
个人更名证明
2015/06/23 职场文书
2015年市场营销工作总结
2015/07/23 职场文书