vite构建工具

Vite是一种新型的前端构建工具;

构建工具:

  1. 模块化方案
  • 提供模块加载方案
  • 兼容不同的模块规范
  1. 语法转义
  • 高级语法转义:sass、TS;
  • 资源加载:img、字体等等;
  1. 产物质量
    产物压缩、无用代码删除、语法降级
  2. 开发效率
    热更新(HMR)

1 webpack

基于的开发服务器
webpack是js应用程序的静态模块打包器(module bundler);
会递归地构建一个依赖关系图,然后将所有这些模块打包成一个或者多个包;

module.exports = {
  entry: {
    main: './src/main.js',
    home: './src/home/index.js',
    about: './src/about/index.js'
  },
  output: {
    filename: '[name].js',
    path: path.resolve(_dirname, 'dist')
  },
}
(function (modules){
  function __weboack_require__(moduleId){}
  ...
  return __weboack_require__(= "./src/main.js")
})({
  './main.js':(function(module, export, __weboack_require__){}),
  './home.js':(function(module, export, __weboack_require__){}),
  './about.js':(function(module, export, __weboack_require__){}),
})

webpack打包完输出的bundle.js文件是一个匿名自执行函数;
参数是Object对象,key是项目中每个模块的js文件名称,value是一个function;
模块中的代码都会被解析后放在这个function内;

运行流程是一个 【串行】的过程 ,从启动到结束,依次执行;
要读取项目中 所有模块,然后打包,然后才运行;

重点在:要读取项目中 所有模块

2 vite

基于本地esm的开发服务;

先启动服务,根据浏览器请求,到了entry 入口,只编译请求的路由和模块;没有请求的路由和模块都不编译;所以速度快;

ES modules(ESM)是 JS 官方的标准化模块系统。
ESM 标准 规范了如何把文件解析为模块记录,如何实例化和如何运行模块。
ESM 使用 实时绑定 的方式;导出和导入的模块 都指向 相同的内存地址(即值引用)。
所以,导出模块内导出的值发生变化后,导入模块中的值也实时改变了;

<h1> 浏览器 ESmodules (ESM) 演示 </h1>

<script type="module">
import { name, showName } from './data.js'
import demo from './demo.json' assert{type:'json'}

console.log('==>name', name)
showName();
console.log('===>demo', demo);
</script>

script 里面加上type="module",这样浏览器才会把相关代码当做 ES6module 来对待;

vite在启动的时候不需要打包,也就意味着不需要分析模块的依赖;不需要编译,因此启动速度非常快;
当浏览器请求某个模块时,再根据需要对模块内容进行编译;(动态编译)

当需要打包到生产环境时,vite 使用传入的rollup (亮点:针对ES6源码进行 Tree Shaking,在打包时静态分析 ES6模块代码中的 import,排除未实际使用的代码,减小构建包的体积)进行打包;所以说 vite 的主要优势在开发阶段;

2.1 为什么说vite是一种新型的前端构建工具,而不称它为打包工具呢?

构架工具:构建过程包括:预编译、语法检查、词法检查、依赖处理、文件合并、文件压缩、单元测试、版本管理等等;
打包工具:更注重打包这一过程;主要包括依赖管理版本管理

3 JS 标准

  1. commonJS规范(同步):适合于服务端;例如:node;
  2. Amd(异步)、cmd规范,适合浏览器环境;
  3. Umd:结合了Amd、commonJs,可以同时运行在服务器和浏览器;
  4. ESM(ES Module)

工具

  • require.js:可以分析amd 模块依赖关系、合并压缩js、优化css;
  • less/sass插件:可以将less/sass代码转化为 css代码;
  • babel:可以将 es6转化为es5;
  • typescript:将ts编译为js;
  • jslint/eslint:代码检查;

4 ES Modules

ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系;
ESM 规范指令只有三个:import、export、export default;

import { star, exists } from 'fs';

从fs模块加载两个方法,其他方法不加载;这种加载方式称为 “编译时加载” 或者 静态加载
commonJS模块运行时加载,效率比 Common JS模块加载方式高;

ES6模块自动采用严格模式,不需要在模块头部加入 “use strict”;

  • 重命名 as import { n1 as nn1 } from ‘./xxx.js’;
  • import 命令有提升效果,会提升至整个模块的头部;
    主要原因:import 命令是编译阶段执行的,在代码运行之前;
  • 模块的整体加载 import * as Obj from ‘/test.js’;
  • 编译时加载、运行时加载;
    • 编译时加载:不加载整个模块,只加载某个输出值;
    • 运行时加载:遇到模块加载命令import,会生成一个只读引用;等到脚本真正执行时,根据只读引用,到加载的模块里面取值;ESM是动态引用,不会缓存值;

相关推荐

  1. 了解vite构建工具

    2024-04-29 10:20:03       62 阅读
  2. vite构建工具

    2024-04-29 10:20:03       33 阅读
  3. Vite:轻量级的前端构建工具

    2024-04-29 10:20:03       40 阅读
  4. Vite 下一代的前端工具链,前端开发与构建工具

    2024-04-29 10:20:03       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-29 10:20:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-29 10:20:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-29 10:20:03       87 阅读
  4. Python语言-面向对象

    2024-04-29 10:20:03       96 阅读

热门阅读

  1. Ali-Sentinel-节点与度量

    2024-04-29 10:20:03       32 阅读
  2. db2 SQLCODE=-1585和SQLSTATE=54048

    2024-04-29 10:20:03       33 阅读
  3. Linux yum/环境变量/服务/进程/hash/bash/防火墙命令

    2024-04-29 10:20:03       40 阅读
  4. 23种设计模式简单记录

    2024-04-29 10:20:03       29 阅读
  5. Vue--关于v-model指令

    2024-04-29 10:20:03       31 阅读
  6. python爬虫6

    2024-04-29 10:20:03       27 阅读
  7. .NET基础入门

    2024-04-29 10:20:03       30 阅读