构建多页面应用——优化(二)

作者 : 开心源码 本文共2094个字,预计阅读时间需要6分钟 发布时间: 2022-05-12 共152人阅读

最近,一直尝试使用webpack做多页面应用的开发。并且一个实际的项目为原型,实现对一个静态的企业站进行优化。原站点地址,测试站点地址。

假如想要做一个自己个个人博客,或者者企业官网来说,有肯定的参考意义。

webpack的resolve.alias

在做板块化开发的过程中,有一个需要处理的问题就是引用板块的路径问题。

注:在webpack中,每一个文件(不论是js,css, html,还是图片等)都被称之为一个块。

为了实现板块化,细粒度化的控制,往往会将代码块分成为不可分割的块,这样做尽管方便了管理控制,但是也会造成项目的文件嵌套很严重,再饮用的时候需要格外小心路径,同时也会造成开发者的负担(抛开其余不讲,但从技术角度来说,对于开发人员来说,能用一行代码处理的问题,绝不用两行,能少输入一个单词就少输入一个)。

而webpack的resolve.alias可以为指定路径的字符串起别名。在本文所使用的示例,这样定义别名:

...resolve: {  alias: {    '@': path.join(__dirname, '..', 'pages/'), // 根目录    '@css': path.join(__dirname, 'assets/css/'), // css    '@img': path.join(__dirname, 'assets/imgs/'), // picture    // '@font': path.join(__dirname, 'assets/fonts/'),    '@data': path.join(__dirname, 'pages/data/'), // mock data    '@utils': path.join(__dirname, 'pages/utils/') // snippets code  }},...

当然,上面的别名并不是万能的,有一个问题就是background-iamgefont-face 的使用url()会有少量问题,url()中的路径必需是字符串,暂时没有好的办法处理。

但是使用sass,可以定义变量,可以通过变量来指定路径,但是要严格控制引用变量板块的文件的目录,在本文所使用的示例中,统一将应用变量文件assets/css/path.scss的文件,控制在两个层级。具体可参考所提供源代码中的具体使用。

模拟数据

实际的项目没有使用任何一种语言的后台代码,更不用说数据库。一律使用的是模拟数据。

为了方便管理维护项目的模拟数据,将项目的所有数据统一整理到了示例的pages/data目录下。

静态资源图片的解决

第一优化的时候,就简单的讲了下,如何使用imagemin提供的插件,来实现对常见类型(.jpg,.png,*.gif)图片的解决。

第一种引用图片的方案

之前做单页面应用开发的时候,喜欢将所有的图片优化解决后统一放在一个目录中,而后将它们放在服务器中,最后在开发或者生产环境中,使用绝对路径进行访问。

这种方式的好处是不用担心相对路径造成的路径问题。但是缺点是,操作起来不方便,尤其是开发环境。由于你不知道项目到底要使用多少的静态资源,尤其是使用哪种静态资源。

这种方式在团队合作的项目中,比较常见,但是对于提升团队的效率并不显著。

第二种引用图片的方案

所以,对于开发者来说,假如假如需要什么静态资源,就放在自己的本地目录,这样可以随心所欲的增加。

在本文所采用的示例中,我做了少量尝试,将所有的图片资源进行了分类。需要转化为base64的图片放一个文件夹assets/imgs/base64/,需要合成雪碧图的单独放在一个文件夹;assets/imgs/sprites/,为了方便管理合成不同雪碧图的源图片,我又在该目录下创立了子文件夹;而对于<img src="..." />要引用的图片的存放使用了两个文件夹,assets/imgs/static存放了未经优化的所有的图片,而目录assets/imgs/others,存放了所有优化过的图片(包含两部分,一部分是使用npm run img命令优化的assets/imgs/static目录下的图片,另一部分是npm run dev命令优化的雪碧图图片,它的前缀带有*-sprite这样的后缀)。

这种方案,使用的是相对路径应用图片。可参考pages/data/contactus.js文件的代码:

const loadImg = require('@utils/load-img')module.exports = {  cn_name: '联络我们',  en_name: 'CONTACT US',  img: loadImg('second/contactus-tag.png'),  ...}

而工具代码片段loadImg的代码如下:

module.exports = function(str) {  return require('@img/other/' + str)}

源代码

webpack4.x multi-page

构建多页面应用系列文章

  • 构建多页面应用
  • 构建多页面应用——单个页面的解决
  • 构建多页面应用——模板
  • 构建多页面应用——静态资源
  • 构建多页面应用——优化(一)
  • 构建多页面应用——hash
  • 构建多页面应用——优化(二)

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 构建多页面应用——优化(二)

发表回复