应使用 ES6 export const 在源码中定义原始数值常量,确保跨环境值一致;Shell export 仅传字符串,不保障数值语义,不可混用;禁用 export default 导出常量集,坚持具名导出以支持 tree-shaking 和静态分析。

要通过 export 导出具备“跨环境一致性”的原始数值常量定义集,关键在于明确区分两种完全不同的 export 语境:JavaScript 模块系统中的 export(ES6)和 Shell 环境中的 export 命令。二者目的、机制与一致性保障方式截然不同。不能混用,否则会导致行为错乱或值丢失。
明确目标环境:JS 模块导出需保证运行时值一致
在前端或 Node.js 项目中,“跨环境一致性”指同一份常量在开发、测试、生产等不同构建/执行环境中始终取相同原始值(如 API_TIMEOUT = 5000),且不被混淆、覆盖或动态修改。
- 使用
export const显式声明,避免let/var+ 后续赋值,防止意外重写 - 禁止在导出前依赖运行时计算(如
process.env.NODE_ENV或Date.now()),确保值静态可预测 - 推荐集中定义再批量导出,提高可维护性与审查便利性
export const MAX_RETRY = 3;<br>export const DEFAULT_PORT = 8080;<br>export const BUFFER_SIZE_KB = 64;<br>export const HTTP_STATUS_OK = 200;
导入时:import { MAX_RETRY, HTTP_STATUS_OK } from './constants.js';
Shell 环境导出仅传递字符串,无法保障数值语义一致性
Linux/macOS 的 export VAR=123 实际导出的是字符串 "123",子进程收到后需自行解析为数字。它不携带类型、精度或单位信息,也不参与 JS 运行时的常量管理。
- 若需将数值常量注入 JS 环境(如通过 Webpack DefinePlugin 或 Vite env),应由构建工具读取 Shell 变量并转换为 JS 字面量,而非直接依赖
process.env.VAR的字符串值 - 避免在 Shell 中导出带小数或科学计数法的数值(如
export PI=3.1415926),因浮点精度可能在不同 shell 解析中微异 - 不要用
export代替配置文件传递复杂常量集;它适合简单开关(DEBUG=true),不适合数值定义集
真正实现跨环境一致性的推荐路径
原始数值常量应定义在源码中,而非运行时环境变量里。环境差异应通过配置层隔离,而非篡改常量本身。
- 把所有数值常量统一放在
src/constants/numbers.js,用export const导出,全程 TypeScript 类型约束(如export const TIMEOUT_MS: number = 5000;) - 构建时若需差异化(如本地 mock 延迟 vs 生产真实延迟),用条件编译或环境感知的配置对象,而非修改常量值本身
- CI/CD 流水线中禁止用
export覆盖源码常量;可校验git diff确保 constants 文件未被脚本意外修改
警惕 export default 与命名导出的误用陷阱
若用 export default { ... } 导出常量对象,虽语法合法,但会失去 tree-shaking 支持,且破坏命名导出的静态可分析性——这间接损害一致性:你无法确认某常量是否被其他模块无意修改(对象属性可变)。
- 坚持使用具名导出(
export const XXX),每个常量独立、不可变、可单独导入 - 禁用
export default导出常量集合;它更适合导出单个主类或函数 - 配合 ESLint 规则(如
no-restricted-exports)阻止非常规导出模式










