ES6能否将模块导入与全局变量赋值合并为单条语句?
当然可以!而且针对你要处理大量文件的情况,我们还能进一步简化操作,彻底摆脱重复劳动~
1. 单条语句合并导入与全局赋值
你可以把导入和全局赋值操作合并成一行,这里有两种常用方案:
方式一:顶层 await(现代环境推荐)
如果你的项目环境支持ES模块的顶层await(比如最新版浏览器、Vite/Webpack等主流构建工具),这种写法最简洁:
window.shared = (await import('./shared.js')).default;
它直接将导入模块的默认导出结果挂载到window全局对象上。
方式二:Promise 链式调用(兼容更多环境)
要是需要兼容不支持顶层await的旧环境,用Promise的then方法也能实现单条语句:
import('./shared.js').then(module => window.shared = module.default);
这行代码会异步加载模块,加载完成后自动把默认导出赋值给全局变量。
2. 批量处理多文件的终极简化方案
既然要处理大量文件,重复写单条语句还是麻烦,推荐用批量导入的工具函数来统一处理:
// 第一步:维护需要全局化的模块清单 const globalModules = [ { path: './shared.js', globalKey: 'shared' }, { path: './utils.js', globalKey: 'utils' }, { path: './form-helpers.js', globalKey: 'formHelpers' }, // 新增模块时只需要在这里加一行配置即可 ]; // 第二步:批量执行导入与全局赋值 async function setupGlobalModules() { for (const { path, globalKey } of globalModules) { const module = await import(path); // 如果是命名导出,把module.default改成对应的导出名即可,比如module.formatDate window[globalKey] = module.default; } } // 启动批量操作 setupGlobalModules();
这样你只需要维护globalModules数组,新增模块时不用重复写导入逻辑,大大减少重复代码量。
内容的提问来源于stack exchange,提问作者DatsunBing
相关产品推荐
相关产品推荐

