Skip to content

实践示例

本节提供 ConfigManager 在实际项目中的使用示例,帮助你快速上手。

示例 1:配置验证与调试

在构建前验证配置,并在调试模式下导出配置快照:

javascript
const { configManager, validateConfig } = require('akfun')

// 加载配置
configManager.autoLoadConfig()
const config = configManager.mergeConfig()

// 开启调试模式
process.env.AKFUN_DEBUG = 'true'

// 验证配置
try {
  validateConfig(config)
  console.log('✓ 配置验证通过')

  // 导出配置用于调试
  if (process.env.DEBUG_CONFIG) {
    configManager.exportConfig('./debug/config.json')
    console.log('配置已导出到 ./debug/config.json')
  }
} catch (error) {
  console.error('✗ 配置验证失败')
  console.error(error.message)
  process.exit(1)
}

示例 2:编程式构建

在脚本中以编程方式执行构建,适用于自动化流程:

javascript
const { build, configManager } = require('akfun')

// 自定义配置
const customConfig = {
  build: {
    assetsRoot: './custom-dist',
    productionSourceMap: false,
    bundleAnalyzerReport: true
  },
  webpack: {
    resolve: {
      alias: {
        '@': './src',
        '@components': './src/components'
      }
    }
  }
}

// 合并配置
configManager.mergeConfig(customConfig)

// 验证配置
configManager.validateConfig()

// 执行构建
build('prod', configManager.getConfig())

示例 3:多项目批量构建

管理多个子项目的配置,依次执行构建:

javascript
// scripts/build-all.js
const { build, configManager } = require('akfun')
const path = require('path')

const projects = [
  { name: 'admin', config: './config/admin.config.js' },
  { name: 'mobile', config: './config/mobile.config.js' },
  { name: 'desktop', config: './config/desktop.config.js' }
]

async function buildAll() {
  for (const project of projects) {
    console.log(`\n========== 构建项目: ${project.name} ==========`)

    // 重置配置管理器(清除上一个项目的配置)
    configManager.reset()

    // 加载项目配置
    configManager.loadUserConfig(project.config)
    const config = configManager.mergeConfig()

    // 验证配置
    configManager.validateConfig()

    // 执行构建
    await build('prod', config)

    console.log(`✓ ${project.name} 构建完成`)
  }

  console.log('\n========== 所有项目构建完成 ==========')
}

buildAll().catch(error => {
  console.error('构建失败:', error)
  process.exit(1)
})

示例 4:动态修改配置

根据运行时条件动态调整配置:

javascript
const { configManager } = require('akfun')

configManager.autoLoadConfig()
configManager.mergeConfig()

// 根据环境变量调整端口
if (process.env.PORT) {
  configManager.setConfig('dev.port', parseInt(process.env.PORT))
}

// 根据命令行参数开启打包分析
if (process.argv.includes('--analyze')) {
  configManager.setConfig('build.bundleAnalyzerReport', true)
}

// 根据分支名设置不同的输出路径
const branch = process.env.GIT_BRANCH || 'main'
if (branch !== 'main') {
  configManager.setConfig('build.assetsRoot', `./dist-${branch}`)
}

const finalConfig = configManager.getConfig()
console.log('最终配置:', JSON.stringify(finalConfig, null, 2))

示例 5:配置对比

对比默认配置和用户配置的差异,帮助理解配置的实际效果:

javascript
const { configManager } = require('akfun')

configManager.autoLoadConfig()

const defaultConfig = configManager.getDefaultConfig()
const userConfig = configManager.getUserConfig()
const mergedConfig = configManager.mergeConfig()

console.log('默认端口:', defaultConfig.dev.port)
console.log('用户配置端口:', userConfig?.dev?.port || '未配置')
console.log('最终端口:', mergedConfig.dev.port)

基于 MIT 许可发布