vite中如何根据不同环境配置打包规则?一个if语句即可搞定!

简介: 【8月更文挑战第1天】vite中如何根据不同环境配置打包规则

通过上一章节,我们知道了vite的默认配置文件是vite.config.js,最基础的配置文件是这样的:

export default {
  // 配置选项
};

也可以通过 --config 命令行选项指定一个配置文件:    vite --config my-config.js

vite运行在node环境,为什么vite.config.js可以书写成esmodule的形式?

vite在读取这个vite.config.js的时候会率先node去解析文件语法, 如果发现你是esmodule规范会直接将你的esmodule规范进行替换变成commonjs规范

配置语法提示

我们在撰写配置时,默认是没有可用配置提示的,这对我们很不友好!(下图的提示并不是vite的可选配置提示,是插件对js的通用提示)

  • webstorm有很好的语法补全功能,vscode没有
  • 如果使用vscode或者其他的编辑器, 则需要做一些特殊处理

我们可以通过一些特殊配置,获得代码补全功能。

defineConfig

加上defineConfig,会惊奇的发现,配置项居然有代码提示了,真香!

jsdoc 注释法

jsDoc是一个用于JavaScript的API文档生成器,官网:https://jsdoc.zcopy.site/

将配置写在viteConfig内并导出,然后再其上面写如下注释:

/** @type import("vite").UserConfig  */

环境模式配置

我们使用webpack时,基于不同的环境,可以设置不同的配置文件,如:webpack.dev.config、webpack.prod.config、webpack.base.config。

如果需要使用vite来基于不同环境设置不同配置,只需要导出这样一个函数:

export default defineConfig(({ command, mode, ssrBuild }) => {
  if (command === 'serve') {
    return {
      // dev 独有配置
    }
  } else {
    // command === 'build'
    return {
      // build 独有配置
    }
  }
})
  • 在开发环境下 command 的值为 serve
  • 生产环境下为 command 的值为 build

多配置集成的一种实现方式

同webapack配置一样,我们也可以定义多个配置文件,然后再vite.config.js中引入使用

import { defineConfig } from "vite";
import viteBaseConfig from "./vite.base.config";
import viteDevConfig from "./vite.dev.config";
import viteProdConfig from "./vite.prod.config";
export default defineConfig(({ command, mode, ssrBuild }) => {
  if (command === "serve") {
    return {
      // dev 独有配置
      ...viteBaseConfig,
      ...viteProdConfig
    };
  } else {
    // command === 'build'
    return {
      // build 独有配置
      ...viteBaseConfig,
      ...viteDevConfig
    };
  }
});

vite.base.config.js代码如下,其余类似。

import { defineConfig } from "vite";
export default defineConfig( {
  
});

当然,我们可以使用策略模式让代码变得更加高级

import { defineConfig } from "vite";
import viteBaseConfig from "./vite.base.config";
import viteDevConfig from "./vite.dev.config";
import viteProdConfig from "./vite.prod.config";
const envResolver = {
  // build: () => ({...viteBaseConfig,... viteProdConfig}) 这种方式也可以
  // Object.assign中的{}是为了防止viteBaseConfig被修改。
  build: () => Object.assign({}, viteBaseConfig, viteProdConfig),
  serve: () => Object.assign({}, viteBaseConfig, viteDevConfig),
};
export default defineConfig(({ command, mode, ssrBuild }) => {
  return envResolver[command]();
});

Object.assign()

Object.assign() 方法将所有可枚举属性从一个或多个源对象复制到目标对象,返回修改后的对象。

注意:该方法会修改源对象!

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget === target);
// expected output: true

环境模式测试

我们在vite.config.js中根据不同环境写下提示信息

import { defineConfig } from "vite";
import viteBaseConfig from "./vite.base.config";
import viteDevConfig from "./vite.dev.config";
import viteProdConfig from "./vite.prod.config";
const envResolver = {
  build: () => {
    console.log("生产模式");
    Object.assign({}, viteBaseConfig, viteProdConfig)
  },
  serve: () => {
    console.log("开发模式");
    Object.assign({}, viteBaseConfig, viteDevConfig)
  },
};
export default defineConfig(({ command, mode, ssrBuild }) => {
  return envResolver[command]();
});

package.json中增加"build": "vite build"

"scripts":jsx {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "vite",
    "build": "vite build"
  },

命令行执行 npm run dev


命令行执行 npm run build

相关文章
|
11月前
|
JavaScript 应用服务中间件 nginx
vuecli3打包项目上线之后报错怎么使用本地的sourcemap文件定位调试?
vuecli3打包项目上线之后报错怎么使用本地的sourcemap文件定位调试?
110 0
|
3月前
|
开发工具 git CDN
大事件项目64----打包发布-开发环境不排除第三方包
大事件项目64----打包发布-开发环境不排除第三方包
|
4月前
|
开发者
Eslint插件使用配置, 规范化开发, 详细配置流程
Eslint插件使用配置, 规范化开发, 详细配置流程
|
3月前
|
前端开发 测试技术 API
vite项目怎么build打包成不同环境的代码?从而适配不同环境api接口
vite项目怎么build打包成不同环境的代码?从而适配不同环境api接口
115 0
|
4月前
|
缓存 前端开发 JavaScript
Vite 打包优化:全面解析与实践
Vite 作为新一代前端构建工具,以其快速开发体验和高效打包能力著称。然而,在实际项目开发中,为了进一步提升性能和用户体验,我们仍需对 Vite 打包进行优化。本文将深入探讨 Vite 打包优化策略,涵盖代码拆分、资源压缩、缓存利用、构建配置等多个方面,并提供实践案例和最佳实践建议,帮助开发者充分释放 Vite 的潜力。
1242 1
|
4月前
|
前端开发 JavaScript 开发者
探索npm的高级特性:自定义脚本与包的发布与维护
探索npm的高级特性:自定义脚本与包的发布与维护
|
JavaScript
vite依赖预构建
vite依赖预构建
149 0
|
缓存 JavaScript 前端开发
快速理解 Vite 的依赖预构建
快速理解 Vite 的依赖预构建
232 0
|
JavaScript 前端开发 Go
esbuild 配置开发环境
esbuild 相信在使用过vite的同学都知道,vite是开发环境使用的是esbuild来进行编译代码的,生成环境打包使用的是rollup,想看rollup的同学,可以查看我的往期文章。(实战 rollup 第一节入门) (rollup 实战第二节 搭建开发环境)(rollup 实战第二节 搭建开发环境)
esbuild 配置开发环境
|
测试技术
vue-cli3打包项目不同环境:开发环境、生产环境、测试环境
vue-cli3打包项目不同环境:开发环境、生产环境、测试环境
232 0