如何无需单独或对象导入,直接按原标识符导入JS模块所有函数?
如何直接导入模块内所有命名导出的函数?
嘿,我来给你梳理下这个问题的解决思路~
首先先明确下你的场景:你在utils/mathlib.js里用命名导出的方式定义了两个函数:
// utils/mathlib.js export function add(x, y) { return x + y; } export function subtract(x, y) { return x - y; }
在main.js里,默认导入import add from "./../utils/mathlib";没法生效(改成默认导出才行),但命名导入import { add } from "./../utils/mathlib";或者整体导入import * as MathLib from "./../utils/mathlib";都能正常工作。你想要的是不用单独导入每个函数,也不用通过模块对象访问,直接用原标识符调用所有导出的函数,对吧?
可行的解决方案
ES模块规范里并没有直接import { * }这种通配符解构导入的语法,但我们可以通过「整体导入模块对象 + 解构赋值」的方式实现需求:
// main.js // 先整体导入整个模块对象 import * as MathLib from "./../utils/mathlib"; // 把模块对象里的所有导出成员解构到当前作用域 const { add, subtract } = MathLib; // 现在就能直接用原标识符调用函数啦 console.log(add(2, 3)); // 输出 5 console.log(subtract(10, 4)); // 输出 6
这种方式的好处是:
- 不用逐个列出要导入的函数名,一次性解构所有导出成员
- 解构后可以直接用
add、subtract这些原名称调用,不用再写MathLib.add这种前缀
补充说明
为什么默认导入会失效?因为你的mathlib.js里只做了命名导出,没有定义export default的默认成员,所以默认导入自然无法获取到有效值。如果想要默认导入生效,你需要在mathlib.js里加上默认导出,比如:
// utils/mathlib.js export function add(x, y) { return x + y; } export function subtract(x, y) { return x - y; } // 添加默认导出 export default { add, subtract };
但这其实和你想要的直接用原标识符的需求不符,所以还是推荐前面的「整体导入+解构」方案。
内容的提问来源于stack exchange,提问作者Ember Freak
相关产品推荐
相关产品推荐

