vue3.0+vite实战(一)

摘要:
它主要是指用户定义的中间件,它可以运行在vite本身的内部中间件中,也可以在vite中间件中结束运行。我们不妨运行vitebuild来看看效果。事实上,无界只是为了改善开发体验。当我们真正部署它时,我们应该遵循整体的建设过程~初步了解vite infinite,这将在详细研究后补充。下一章将总结vue3.0的特性,并将其与ts结合起来。

此文章先从如何使用再到vite与vue3.0基础特性

背景:项目技术选型倾向的原因,要尝试vue3.0,所以使用了“配套的vite”作为前端构建工具

创建web工程

yarn create @vitejs/app my-vue-app --template vue-ts

ps:node版本 >=12.0.0

目录结构

vue3.0+vite实战(一)第1张

 这里的shims-vue.d.ts文件是告诉ts如何识别vue文件

观察下package.json文件,看看有哪些依赖

vue3.0+vite实战(一)第2张

安装依赖

cnpm install

启动项目

npm run dev

启动成功之后效果

vue3.0+vite实战(一)第3张

用法很简单,主要针对vite有哪些比webpack更强大得特性

核心:boundless

了解boundless之前先了解下webpack得构建模式

webpack

vue3.0+vite实战(一)第4张

webpack通过入口文件,遍历整个依赖关系图,最终根据入口文件生成目标boundle.js,当项目体积越来越大得时候。整个构建过程变得越来越慢,通过一些方法可以提升这部分得效率,比如多线程构建,缓存,提取公共文件(每次构建避免构建这部分内容),利用这些方式可以加速构建速度,但也都有上限,当我们利用hot dev server热更新得时候,webpack得模式也是先构建然后再进行热更新。那么如何更优雅得解决这类问题,boundless解决方案能带来更好得开发体验

boundless解决方案直接跳过依赖构建得过程,使得浏览器直接加载目标文件,少了构建过程,解决了webpack在提升构建得整个过程中浪费得资源

boundless效果图

vue3.0+vite实战(一)第5张

 boundless解决方案带来了好处:

1提升了构建过程,因为不需要构建了

2提升了项目启动时间,因为不需要构建了

3提升了文件编译速度,针对性得编译目标修改文件,提升了热更新的效率

4更高效的开发,代码跟踪,不在依赖source-map

具体得好处我们可以看下实际应用得体现

webpack

修改文件发生哪些变化(HMR)

vue3.0+vite实战(一)第6张

vue3.0+vite实战(一)第7张

 可以看到监听到文件变化后,仍然是先构建,然后浏览器在加载boundle文件

 vue3.0+vite实战(一)第8张

 vite (boundless方案)

修改文件观察变化

vue3.0+vite实战(一)第9张

只重新编译了修改的目标文件

vue3.0+vite实战(一)第10张

浏览器也只重新加载了目标文件。

到这里可以看到了boundless方案直观上的优势。采用这种方案的还有snowpack。

boundless如何实现

1.如今模块化大行其道,ES module成了主要趋势,所以我们可以基于ES module 做动态引入

<script type='module'>
      import d from '/demo.js'
      console.log(d) // 123
    </script>

 2.利用systemjs-importmap+system.import

<script type="systemjs-importmap">
    {
      "imports": {
        "COMMON": "http://localhost:3000/manifest.json"
      }
    }
  </script>
System.import(COMMON)

3 importmap

{
    "imports": {
      "demo": "./demo.js",
    }
  }
import a from 'demo'

 热更新只要本地启动dersever,本地文件相对路径生成映射的map.json文件,然后通过esmodule方式import目标文件就可以实现。具体怎么做,如何锁定更改文件,只load更改文件,挺难我不会。等我研究明白了再写。

optimize

这个概念在webpack4.0以后也是一个核心优化思想,起主要目的就是抽离公共文件,进而通过浏览器自带缓存提升页面体验,但是在vite中是干啥用的捏?

vite通过optimize自动将package.json文件中的depenencies借助rollup打包成ES model(rollup是打包工具,而且自带按需加载功能,最好了解一下rollup,官方文档也特意说明了vite对rollup的支持,Vite plugins extends Rollup's well-designed plugin interface with a few extra vite-specific option)

大致流程:vite(optimize) => package.json(depenencies)=>rollup打包=>写入.vue_opt_cache

打包也是有先来后到的,提前打包带来的好处除了能够提升页面的加载速度,借助 @rollup/plugin-commonjs 我们能够将 commonjs 的外部依赖打包为 ESModule 的形式引入,进一步扩大 Bundleless 的适用范围。

扩展功能:

vite专门提供了一个针对rollup插件的容器,同样也支持一些特定的钩子当这些钩子启用的时候会自动忽略rollup钩子

vite特定钩子

config

在解析配置之前设置一些plugin来修改vite的配置,或者获获取构建过程中的一些信息,其实就是webpack的自定义plugin,这个过程中拿到compiler跟compiltion信息在做特性修改

configResolved

解析之后vite之后做修改,与config类似,只是针对的vite构建时间点不同进行取舍

configureServer

用于配置开发服务器的钩子。主要是自定义中间件,中间件可以在vite自身内部中间件中间运行,也可以在vite中间件结束运行。

transformIndexHtml

转换html专用的钩子,针对输出的html做特定修改。

handleHotUpdate

自定义热更新的处理规则

本菜鸡目前大概了解这些,到这里会有疑问,既然没有构建过程,怎么部署?不妨执行下vite build看下效果,其实boundless只是针对提高开发的体验,真正部署的时候还是遵循整体构建流程~

初步了解vite的boundless,待详细研究过在做补充,下一篇总结vue3.0特性以及结合ts。

免责声明:文章转载自《vue3.0+vite实战(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FFmpeg视频处理Mac快速打开资源库文件夹(Library)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Vue-cli入门(一)——项目搭建

Vue-cli入门(一)——项目搭建 前言: Vue-cli是一款基于vue的项目脚手架工具,其集成了webpack环境和主要的依赖,对于我们的项目搭建、开发、打包、维护管理等都是非常的方便。 主要内容: 1、 node.js安装和配置环境 2、 构建vue-cli项目模板 安装Node.js本地环境 1、 下载安装node.js(官网),下载最新稳定版本...

webpack的使用方法

我常用的webpack版本是3.8.1版本 https://www.cnblogs.com/QxQstar/p/5961387.html    这个是他的网址 那么我们说一下webpack,他是一个前端资源加载或打包的工具,他可以打包:img,css,js,json等 第一步:下载   npm  install  -g  webpack@3.8.1    ...

gulp与webpack-stream集成配置

  webpack非常强大,但是也有不足的地方,批量式处理依然是gulp更胜一筹.我们是否可以将两者的优点结合起来呢? 这篇文章就是讲述如何集成gulp和webpack 1.安装webpack-stream 很重要的插件,当然也可以直接使用官方的webpack,集成方式可以看webpack官网. 但webpack-stream更符合gulp的流语法. s...

webpack4.0打包失败的探索

①:运行命令npx webpack index.js 打包index.js文件失败,如下图提示 度娘说是因为没有设置webpack为生产或开发模式,于是我在package.json文件中添加如下代码 "scripts": { "dev":"webpack –-mode development", "build": "webpack –-...

webpack 4.0 配置文件 webpack.config.js文件的放置位置

  一般webpack.config.js是默认放在根目录的,不在根目录的时候需要在package.json中制定位置,我的配置文件目录是config/webpack.config.js,在package.json文件中的配置为: "scripts": { "build": "webpack --mode production --config ./...

vue前端工程化

今日目标 1.能够了解模块化的相关规范 2.了解webpack3.了解使用Vue单文件组件4.能够搭建Vue脚手架5.掌握Element-UI的使用 1.模块化的分类 A.浏览器端的模块化 1).AMD(Asynchronous Module Definition,异步模块定义)代表产品为:Require.js2).CMD(Common Module D...