前端路由&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 Event事件学习第一章 Event介绍
Feb 07 Javascript
JQuery将文本转化成JSON对象需要注意的问题
May 09 Javascript
jquery实现商品拖动选择效果代码(自写)
May 28 Javascript
基于bootstrap实现广告轮播带图片和文字效果
Jul 22 Javascript
js 判断附件后缀的简单实现方法
Oct 11 Javascript
使用Angular.js实现简单的购物车功能
Nov 21 Javascript
jquery 判断div show的状态实例
Dec 03 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
Aug 25 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
Nov 27 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
Sep 27 Javascript
在vue中使用image-webpack-loader实例
Nov 12 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
Feb 24 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
解析php5配置使用pdo
2013/07/03 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
2020/07/28 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
简明 Python 基础学习教程
2007/02/08 Python
python中__slots__用法实例
2015/06/04 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
python基于ID3思想的决策树
2018/01/03 Python
Python中按键来获取指定的值
2019/03/02 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
Python 使用office365邮箱的示例
2020/10/29 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
高山背包:High Sierra
2017/11/23 全球购物
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
应届生骨科医生求职信
2013/10/31 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
商场促销活动方案
2014/02/08 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
家长高考寄语
2015/02/27 职场文书
总结会主持词
2015/07/02 职场文书
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python