Skip to content

目标

不同工具的区别

webpack 适合用于打包 app,rollup 适合用于打包库

webpack 使用场景

  • 打包 app
  • 代码分隔、静态资源处理、CommonJS 依赖处理

rollup

  • ES2015 modules 代码

rollup

rollup 可以打包输出 es module、commonjs 等不同模块格式的文件。

shell
npx rollup -c config.js -i src/components/button/index.js -f es --name "myBundle" -o bundle.js

配置文件

配置

js
import json from '@rollup/plugin-json';
import resolve from '@rollup/plugin-node-resolve';

export default {
  input: 'src/main.js',
  output: {
    file: 'bundle.js',
    format: 'es', // amd, cjs, es, iife, umd, system
  },
  output: [
    {
      file: 'bundle.js',
      format: 'cjs',
    },
    {
      file: 'bundle.min.js',
      format: 'iife',
      name: 'version',
      plugins: [terser()], // 压缩
    },
  ],
  plugins: [
    // 解析三方npm包
    resolve({
      // pass custom options to the resolve plugin
      moduleDirectories: ['node_modules'],
    }),
    // 解析json文件
    json(),
  ],
  // indicate which modules should be treated as external
  external: ['lodash', 'vue'],
};

Rollup will only resolve relative module IDs by default. rollup 默认不解析引用的外部三方库,如:import moment from 'moment';

插件

json
@rollup/plugin-json
rollup-plugin-postcss 
@rollup/plugin-node-resolve

postcss
postcss-url
@rollup/plugin-url

Vite

Vite 比 Webpack 快主要有以下原因:

  1. 开发服务器启动快

    • Vite 利用了现代浏览器对 ES 模块的原生支持,不需要打包就可以直接在浏览器中加载模块。由于省去了打包过程 vite 的启动速度很快,vite 可以先启动服务器然后按需加载和编译模块

    • 使用了缓存机制,网络请求中有大量的 304

  2. Vite 是使用 ESbuild 预构建依赖。Esbuild 是一个使用 Go 语言编写的打包工具,其构建速度比以 Node.js 编写的打包器要快得多

  3. 热更新快:Vite 基于高效的文件系统事件监听,能够快速检测到文件的变化并进行热更新,而 Webpack 的热更新过程相对较慢。

  4. 按需编译:只有当请求某个模块时,才会对该模块进行编译

概念

Vite 的目标仅为现代浏览器

Vite 的工作是尽可能快地将源模块转化为可以在浏览器中运行的形式

Vite 通过在一开始将应用中的模块区分为【依赖】和【源码】两类。

npm 依赖解析。

依赖强缓存【403】

【按需编译】

需要浏览器支持 ES Module ,最低支持 ES6(es2015)

功能

使用 Rollup 打包源码

  1. Vite 能够处理依赖关系,解析处于根目录外的文件位置,这使得它即使在基于 monorepo 的方案中也十分有用。

  2. 支持多个 .html 作入口点的 多页面应用模式

  3. 内置对 TypeScript 的支持,Vite 使用 esbuild 将 TypeScript 转译到 JavaScript

  4. .jsx 和 .tsx 文件开箱即用,JSX 的转译同样是通过 esbuild。

  5. Glob 实现批量导入模块

  6. 支持 SSR(实验性)

  7. 组件按需加载

unplugin-vue-components 和 unplugin-auto-import 这两款 vite 插件来开启按需加载及自动导入,插件会自动解析模板中的使用到的组件,并导入组件和对应的样式文件。

这两个插件一个是自动帮我们引入一些组件和指令(只做 HTML 中使用的常规组件例如各种 .vue 组件的引入以及指令的自动引入),另一个是自动帮我们做一些 API 组件的自动引入(像直接在 script 中引入的必须用 API 调用的 Message 组件以及后面我们还会用它做 Vue 的一些 API 自动引入等等)

预构建依赖

依赖预构建仅会在开发模式下应用,并会使用 esbuild 将依赖转为 ESM 模块。在生产构建中则会使用 @rollup/plugin-commonjs

作用

  1. 兼容 UMD 和 CommonJS,开发阶段中,Vite 的开发服务器将所有代码视为原生 ES 模块。因此,Vite 必须先将作为 CommonJS 或 UMD 发布的依赖项转换为 ESM。
  2. 合并体积小的模块,减少网络请求

插件

Vite 插件是一个返回配置对象的函数,配置对象包含 name、钩子函数等属性

钩子有:

  • buildStart buildEnd
  • Options config
  • resolveId
  • transform
  • load

vue3 + vite配置

创建项目 创建一个 Vue3+Vite 项目 2022年了,搞清楚 ESLint 和 Prettier 吧 把项目跑起来 跑一下项目 nvm管理&切换Node版本 nrm管理&切换镜像源 让项目更健壮 了解项目中每一个文件的作用 安装组件库 配置项目内组件 & API 的自动引入 安装 VueUse 配置 ESLint 和 Prettier 配置 SVGIcon Styles 公共样式管理、初始化样式 配置 UnoCSS Utils、Hooks、API 管理 其他 Vite 配置 添加 Config 配置 配置 VSCode 推荐扩展插件

  • 组件、API 自动导入:
  • SVGIcon:unplugin-icons

esbuild

esbuild 只能将代码转成 es6

杂项

  • .eslintignore

    • **/cafe-directive
  • package.json 配置 directories file unpkg

  • npm pack

json
"files": [
    "package.json",
    "es",
    "lib",
    "dist",
    "LICENSE",
    "README.md"
  ],

插件

shell
npm github-markdown-css 
vue add style-resources-loader