vue开发多页应用,vue开发网页案例

  vue开发多页应用,vue开发网页案例

  通常,我们的vue项目是单页的。实际上,由于vue在工程开发上依赖于webpack,Web Pack,webpack us整合了所有的资源,形成一个单一的页面。下面这篇文章主要介绍vue多页面项目开发的相关信息,有需要的朋友可以参考一下。

  

目录

  单页应用与多页应用单页应用优缺点配置多页应用1。修改vue.config.js2修改title3。合并第三方库4。打包第三方scss5。其他常见设置摘要

  

单页应用和多页应用

  

单页应用

  SPA(单页应用):单页应用,即一个web项目只有一个页面(即一个HTML文件)。

  就是把整个项目所有页面的所有内容分成很多小块(也就是组件),可以重用,可以随意调整。每个组件都是一个独立的部分(包括html、css和javascript代码)。再做一个html(基本没啥)。这个html是一个页面容器。需要放什么组件的时候,直接介绍就行了。跳的时候直接跳组件就好了。当需要加载一个组件时,js会在这些组件中动态创建HTML和CSS。

  这类项目通常都需要router来进行页面跳转.

  一开始只需要加载一次js、css的相关资源。所有内容都包含在主页面,对每一个功能模块组件化。单页应用跳转,就是切换相关组件,仅仅刷新局部资源。

  压缩页面分布目录结构

  距离

  静电

   js

   img

   dll

   .

  index.html

   .

   .

  

多页应用

  MPA(multipage application):多页面应用,即一个web项目有多个页面(即多个HTML文件)。

  指有多个独立页面(多个html页面)的应用,每个页面都要重复加载js、css等相关资源。多页面应用跳转需要刷新整个页面资源。

  项目是由多个完整的页面组成。多页面跳转刷新所有资源,每个公共资源(js、css等)需选择性重新加载。

  压缩页面分布目录结构

  距离

  页面(此处打包哪个文件夹并自行配置)

   js

   img

  index.html

  user.html

  setting.html

   .超文本标记语言

   .超文本标记语言。。。

  

优缺点

  单页应用程序的优点和缺点

  优势

  有良好的交互体验。可以改善页面切换体验,用户在访问应用页面时不会频繁切换浏览页面,避免页面重载。

  页面一次性请求web应用的所有代码(HTML、JavaScript和CSS),考虑到首屏加载慢,有时会按需加载。这样以后用户的每一个动作都不会重新加载页面(也就是不再需要向服务器索要页面缓慢的HTML、css、js代码)。而是会用JavaScript动态转换HTML内容(这个不需要和服务器交互,除非数据是动态的,那你只需要向服务器要数据就可以了)。

  劣势

  SEO很难。

  第一次屏幕加载(初始加载)需要很长时间。为了实现单页面Web应用的功能和显示效果,页面加载时要统一加载JavaScript和CSS,需要时可以加载部分页面。所以JavaScript和CSS代码必须结合压缩;

  多页应用程序的优点和缺点

  优势

  对seo有好处。

  第一个屏幕加载很快。

  劣势

  页面切换慢。共享资源(html,css,js)不共享,每个页面都需要加载。

  页面上有许多重复的代码。

  

配置多页应用

  

1. 修改vue.config.js

  官网配置入口

  以多页模式构建应用程序。每个“页面”都应该有一个对应的JavaScript入口文件。它的值应该是一个对象,对象的键是门户的名称,值是:

  指定了条目、模板、文件名、标题和块的对象(除了条目之外都是可选的);或者指定其条目的字符串。模块.导出={

  页数:{

  索引:{

  //页面的入口

  条目: src/index/main.js ,

  //模板源

  模板:“public/index.html”,

  //dist/index . html中的输出

  文件名:“index.html”,

  //当使用标题选项时,

  //模板中的标题标签需要是title %=htmlwebpackplugin。选项。标题%/标题

  标题:"索引页",

  //在这个页面中包含的块,默认情况下会包含

  //提取出来的通用矮胖的人或物和供应商区块。

  块:[块供应商,块公共,索引]

  },

  //当使用只有入口的字符串格式时,

  //模板会被推导为` public/subpage.html

  //并且如果找不到的话,就回退到` public/index.html

  //输出文件名会被推导为subpage.html

  子页面: src/subpage/main.js

  }

  }

  以上是官网的例子,这里我们改写一下,统一配置多页

  前提条件在科学研究委员会下新建一个页文件夹

  页新建如下三个文件

  页

  index-skeleton.html

  indexApp.html

   app.js

  const glob=require(glob )

  const fs=require( fs );

  let title obj={ };

  //统一配置多页

  //这里是遍历科学研究委员会下面的页下面每个文件夹(例如索引)下以xxxApp.vue命名的某视频剪辑软件页面

  glob.sync( ./src/pages/* */* app。vue’).forEach((路径)={

  //遍历小路

  console.log(路径,"路径")

  //./src/pages/index/indexApp.vue路径

  //找到文件名

  常量文件名=路径。split(/)[路径。拆分(/).长度-1];

  console.log(文件名,"文件名")

  //indexApp.vue文件名

  //去掉应用后缀

  const chunk=path.substring(12,path。(/ fileName))的索引;

  console.log(chunk,“chunk”)

  //索引区块

  //这里是给每个页面设置标题,需要在indexApp.vue设置一个变量页面标题

  设文件内容=fs。readFileSync(路径,{编码: utf-8 })。toString()。替换(/\r\n/g, );

  文件内容=文件内容。substr(文件内容。的索引(页面标题:);

  文件内容=文件内容。substr(0,fileContent.indexOf(,);

  文件内容=

  文件内容。(“”)0的索引

  ?文件内容。substr(文件内容。的索引(“”)1)

  :文件内容。substr(文件内容。的索引(“”)1);

  文件内容=

  文件内容。(“”)0的索引

  ?fileContent.substr(0,fileContent.indexOf( ))

  :fileContent.substr(0,文件内容。(“”)的索引;

  titleObj[chunk]=fileContent?文件内容: 标题;

  });

  //这里是遍历科学研究委员会下面的页下面每个文件夹(例如索引)下以app.js

  glob.sync( ./src/pages/**/app.js ).forEach((路径)={

  //打包射流研究…

  const chunk=path.split( ./src/pages/)[1].拆分(/app。js )[0];

  const tmp=chunk。拆分(/);

  //模版html,如果都是一样的,可以直接使用公众的下index.html,如果要设置标题的话,需要每个页面都有一个超文本标记语言模版,如果不需要,就可以使用同一个,看个人习惯

  let templateUrl=

  src/pages/ chunk / tmp[tmp。长度-1]-骨架。html ;

  页数[区块]={

  条目:路径,//入口文件

  模板:templateUrl,//模版超文本标记语言

  title: titleObj[chunk]?titleObj[chunk]:标题,//标题

  文件名:chunk.replace(/\//g,-) .html ,//打包出来的超文本标记语言名字

  块:[块供应商,块公共,块],//依赖包

  };

  });

  模块。导出={

  //选项.

  公共路径:过程。环境。node _ ENV===生产

  ?/dist/

  : /,

  页数,

  }

  

2. 修改title

  其实是用插件替换的

  很简单,就是把超文本标记语言模版中的标题使用模版语法就行

  例如index-skeleton.html这里每个页面超文本标记语言都是一样的,复制即可

  title %=htmlwebpackplugin。选项。标题%/标题

  

3. 合并第三方库

  如果不设置分包,所有节点_模块里面的第三方资源库,例如Echarts,Axios,ali-oss,等等都会被打进大块供应商,至于为什么会打进去,我们看下vue。配置。射流研究…默认的分包规则

  官网分包拆分块入口

  官网默认的配置

  模块。导出={

  //.

  //.

  优化:{

  拆分块

  区块:"异步",//代码分割时对异步代码生效,全部:所有代码有效,初始:同步代码有效

  最小尺寸:30000,//代码分割最小的模块大小,引入的模块大于30000B才做代码分割

  MaxSize: 0,//码分的最大模块大小。如果大于该值,则需要进行码分,一般使用默认值。

  MinChunks: 1,//只有引入次数大于等于1时才进行代码分割。

  MaxsyncRequests: 6,//异步请求的最大数量,即同时加载的模块的最大数量。

  MaxInitialRequests: 4,//通过代码分割将入口文件最多分割成4个js文件。

  AutomaticNameDelimiter: ~ ,//文件生成时的连接器

  AutomaticNameMaxLength: 30,//自动生成的文件名的最大长度

  缓存组:{

  供应商:{

  Test:/[\ \/] node_modules [\ \/]/,//位于node_modules中的模块做代码分割。

  优先级:-10 //根据优先级,决定封装到哪个组中,比如node_modules中的一个模块进行编码。

  },//split,既满足vendors,又满足default,则按优先级打包到vendors组。

  默认:{//无测试表示所有模块都可以进入默认组,但是注意它的优先级低。

  优先级:-20,//根据优先级,决定装入哪个组,装入优先级最高的组。

  seexistingchunk:true///如果某个模块已经打包,那么再次打包时会忽略之前的模块。

  }

  }

  }

  }

  };

  让我们来关注一下minChunks的配置。默认情况下,大于一倍就会被转包。以前是单页,所以分包没问题,只会在index.html引进。现在它是多页的,并且这一大块供应商将被介绍到每一页。有些包实际上只被两三个页面使用。所以最好不要转包,或者达到一定次数才转包才有意义。

  分包前我们在这里设置了8次,几乎没有分包。可以根据自己的需求自行设置。

  优化:{

  最小化:假,

  splitChunks

  缓存组:{//缓存组

  公共:{//公共模块

  Name: chunk-common ,//名称应该与上面的chunks定义一致。

  组块:“初始”,

  MinSize: 1,//大小限制

  优先级:0,

  MinChunks: 8,//至少重用过几次。

  },

  //打包第三方库的文件

  供应商:{

  Name: chunk-vendors ,//该名称应该与上面的chunk定义一致。

  测试:/[\ \/]节点模块[\\/]/,

  组块:“初始”,

  优先级:10,//权限更高,重要的是先撤!

  minChunks: 8,

  },

  },

  },

  },

  

4. 打包第三方scss

  有一些自己写的公共SCS,比如common.scss,我不想在页面上介绍,因为每一页都要介绍。其实也有一个很简单的处理方法。这个和之前变化不大,不想多说,直接上代码。

  让scssVariables=require(。/src/scss/variables . scss . js );

  css: {

  loaderOptions: {

  scss: {

  前置数据:

  object . keys(SCS变量)。map((k)=`${k.replace(_ ,-)}:$ { SCS variables[k]};`)。join(\n) \n ,

  },

  },

  },

  

5. 其它常见设置

  只是一些常见的设置。看个人设置。这里,我们推荐filenameHashing。多页应用程序的设置没有哈希。因为路由不用,所以不会用。

  模块.导出={

  公共路径:“”。/,

  //输出目录

  输出目录:“基金”,

  资产目录: ,

  //配置别名

  chainWebpack: (config)={

  config.resolve.alias.set(@ ,resolve( src );

  config.resolve.alias.set(@@ ),resolve( src/components );

  config . resolve . alias . set( @ assets ,resolve( src/assets ));

  config.resolve.alias.set(scss ,resolve( src/scss ));

  },

  //关闭eslint验证

  lintOnSave:假的,

  //不生成地图文件

  productionSourceMap: false,

  //文件名没有哈希值

  filenameHashing: false,

  devServer: {

  public path:“/fund/”,

  代理:{//本地调试转发

  /api: {

  目标:“http://127.0.0.1:8080”,

  changeOrigin:真的,

  路径重写:{

  ^/api: ,

  },

  },

  },

  },

  };

  

总结

  关于vue多页面项目开发的这篇文章到此为止。更多相关vue多页项目开发内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: