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

如何在ES Modules中根据环境条件实现条件式模块导入?

用ES Modules实现环境区分的配置导出

原CommonJS参考代码:

if (process.env.NODE_ENV === "production") {
  module.exports = require('./prod')
} else {
  module.exports = require('./dev')
}

以下是几种用ES Modules (import/export)实现相同功能的方案:

方式一:顶层await动态导入(推荐,现代环境适用)

ES Modules支持顶层await(Node.js 14.8+、现代浏览器),可以直接在模块顶层根据环境判断并导入对应配置:

若prod/dev是默认导出

let config;
if (process.env.NODE_ENV === "production") {
  const prodModule = await import('./prod.js');
  config = prodModule.default;
} else {
  const devModule = await import('./dev.js');
  config = devModule.default;
}

export default config;

若prod/dev是命名导出

let config;
if (process.env.NODE_ENV === "production") {
  const { prodConfig } = await import('./prod.js');
  config = prodConfig;
} else {
  const { devConfig } = await import('./dev.js');
  config = devConfig;
}

export default config;

方式二:异步函数封装(兼容老环境)

如果环境不支持顶层await,可以把配置导出封装成异步函数,调用方通过await获取:

export async function getConfig() {
  if (process.env.NODE_ENV === "production") {
    const { default: prodConfig } = await import('./prod.js');
    return prodConfig;
  } else {
    const { default: devConfig } = await import('./dev.js');
    return devConfig;
  }
}

调用示例:

import { getConfig } from './config.js';

const config = await getConfig();
// 使用config进行后续操作

方式三:Node.js静态条件导出(打包友好)

如果是Node.js环境,还可以通过package.json的exports字段实现静态条件导出,无需运行时判断,打包工具(如Webpack、Rollup)能更好地做树摇优化:

在项目根目录的package.json中添加:

{
  "exports": {
    ".": {
      "production": "./prod.js",
      "development": "./dev.js",
      "default": "./dev.js"
    }
  }
}

之后直接导入即可,Node.js会自动根据NODE_ENV选择对应模块:

import config from './config.js';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:54:58