
本文介绍在 es 模块环境中,如何高效导出上千个常量变量,并支持在导入端直接按名称引用(如 accountname_length),避免通过对象属性访问(如 enums.accountname_length)。
本文介绍在 es 模块环境中,如何高效导出上千个常量变量,并支持在导入端直接按名称引用(如 accountname_length),避免通过对象属性访问(如 enums.accountname_length)。
在现代 JavaScript(ESM)中,无法通过 export { ...ENUMS } 解构导出对象属性——这会报语法错误,因为 export { ...obj } 仅支持静态标识符列表,不支持运行时展开。要实现“直接按名导入”,必须将每个常量单独声明并显式导出。
✅ 正确做法:每个常量独立声明导出
在 consts.js 中逐条定义并导出:
// consts.js export const ACCOUNTNAME_LENGTH = 52; export const ACCOUNTPASS_LENGTH = 36; export const SZNAME_LENGTH = 20; // …… 继续添加其余 997 个常量(推荐脚本生成)
在使用处,可选择性导入所需变量:
// app.js
import { ACCOUNTNAME_LENGTH, ACCOUNTPASS_LENGTH } from './consts.js';
console.log(ACCOUNTNAME_LENGTH); // ✅ 直接使用,无需 ENUMS.或一次性导入全部(适用于需全部使用的场景):
// app.js
import * as Consts from './consts.js';
console.log(Consts.ACCOUNTNAME_LENGTH); // ❌ 仍需通过命名空间访问
// 但若配合解构,可达到等效效果:
const { ACCOUNTNAME_LENGTH, SZNAME_LENGTH } = Consts;⚠️ 注意事项:
- 不可用 export default ENUMS + import ENUMS from:这会导致必须通过 ENUMS.KEY 访问,违背“直接命名引用”需求;
- 避免动态生成 export 语句:ESM 不支持运行时导出,所有 export 必须是静态声明;
- 1000+ 变量建议自动化生成:手动编写易错且低效。可用 Node.js 脚本读取 JSON 配置自动生成 consts.js:
// generate-consts.js
const fs = require('fs');
const enums = {
ACCOUNTNAME_LENGTH: 52,
ACCOUNTPASS_LENGTH: 36,
SZNAME_LENGTH: 20,
// ... 其他字段(实际可从 JSON/Excel 加载)
};
const content = Object.entries(enums)
.map(([key, value]) => `export const ${key} = ${value};`)
.join('\n');
fs.writeFileSync('consts.js', content + '\n');
console.log('✅ consts.js generated.');? 总结:
ES 模块的静态导出机制决定了“直接命名导入”必须基于显式 export const XXX 声明。虽然代码量增加,但换来的是类型推断友好、Tree-shaking 支持、IDE 自动补全完善以及零运行时开销。对于超大批量常量,务必借助代码生成工具提升可维护性与可靠性。

















