You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Vite构建生产与开发双版本类库?

使用Vite实现类库的多环境构建与版本切换

1. 配置Vite多构建目标

Vite支持导出配置数组来实现多构建输出,类似Webpack的多配置模式。在项目根目录的vite.config.js中编写如下配置:

import { defineConfig } from 'vite';

export default defineConfig([
  // 生产环境构建配置
  {
    mode: 'production',
    build: {
      lib: {
        entry: './src/index.js', // 你的类库源码入口文件
        name: 'MyLib', // 类库全局变量名(umd格式用)
        formats: ['umd'], // 可按需添加es、cjs等格式
        fileName: (format) => `mylib.production.${format}.js`,
      },
      outDir: 'dist',
      minify: 'terser', // 生产版本开启压缩
      define: {
        'process.env.NODE_ENV': JSON.stringify('production'),
      },
    },
  },
  // 开发环境构建配置
  {
    mode: 'development',
    build: {
      lib: {
        entry: './src/index.js',
        name: 'MyLib',
        formats: ['umd'],
        fileName: (format) => `mylib.development.${format}.js`,
      },
      outDir: 'dist',
      minify: false, // 开发版本关闭压缩,保留调试信息
      sourcemap: true, // 开启sourcemap方便调试
      define: {
        'process.env.NODE_ENV': JSON.stringify('development'),
      },
    },
  },
]);

2. 编写环境切换入口文件

在项目根目录创建index.js(作为npm包main字段的指向文件),保留和Webpack时代一致的环境判断逻辑:

'use strict';

if (process.env.NODE_ENV === 'production') {
  module.exports = require('./dist/mylib.production.umd.js');
} else {
  module.exports = require('./dist/mylib.development.umd.js');
}

如果你的类库需要支持ESM,可额外创建index.esm.js并在package.json中配置exports字段:

// index.esm.js
if (import.meta.env.MODE === 'production') {
  export * from './dist/mylib.production.es.js';
} else {
  export * from './dist/mylib.development.es.js';
}

对应的package.json配置:

{
  "main": "./index.js",
  "module": "./index.esm.js",
  "exports": {
    ".": {
      "require": "./index.js",
      "import": "./index.esm.js"
    }
  }
}

3. 源码中的环境分支处理

在类库源码中,直接通过process.env.NODE_ENV区分环境,编写开发专属逻辑:

// src/index.js
export default function myLib() {
  // 开发版本专属警告与调试工具
  if (process.env.NODE_ENV !== 'production') {
    console.warn('[MyLib] 当前为开发版本,包含调试信息');
    // 集成开发者工具的代码
  }

  // 类库核心业务逻辑
  return 'Hello from MyLib';
}

Vite会在打包时自动替换process.env.NODE_ENV的值,生产版本中无关代码会被tree-shaking移除。

4. 执行打包

在package.json中添加打包命令:

{
  "scripts": {
    "build": "vite build"
  }
}

执行npm run build后,Vite会依次完成两个环境的构建,输出文件到dist目录。

内容的提问来源于stack exchange,提问作者Incepter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:30:58