如何在ES6模块包中对函数进行分组?在CommonJS包中,您可以这样做。
// package.js
const startSession = require("./startSession");
module.exports = {
hooks: {
startSession,
},
};
// client.js
const { hooks: {startSession } } = require("package");
// OR
const { startSession } = require("package").hooks;看起来不支持ES6代码中类似的语法。
import { hooks: {startSession } } from "packageX";这方面的消息来源是2016年的巴贝尔事件。https://github.com/babel/babel/issues/4996
另一个是官方文档,它并没有真正提到这种语法。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import
解决方案
ES6 javascript中的一个解决方案是这样的。
// package.js
import startSession from "./hooks/start-session";
export const hooks = {
startSession
};
// client.js
import { hooks } from "package";
const { startSession } = hooks;但是我想把导入写成一行。也许不可能?
这不是我要找的。
import { hooks } from "package"; const { startSession } = hooks;这种语法很好,但是如果可能的话,如何设置包呢?
import { startSession } from "packageX/hooks";
import { startSession } from "packageX".hooks;还有其他建议吗?
答案
下面的埃斯特斯把我推向了正确的方向。这是一个更详细的答案。
// package.json
"main": "src/index.js",
"exports": {
".": "./src/index.js",
"./hooks": "./src/hooks/index.js",
}
// src/hooks/start-session.js
export default () => {}
// src/hooks/index.js
export * as startSession from "./start-session";
// src/index.js
export const doSomething () => {}
// client.js
import { doSomething } from "packageX";
import { startSession } from "packageX/hooks";发布于 2021-03-25 21:32:00
ES模块应该进行静态分析,因此不可能从表达式中产生嵌套导入。导入语法并不是析构的,只是外观类似。它是严格规定;如果没有特性,就不支持它。
最好避免这种情况,因为这样可以防止hooks属性被树抖动(目前不适用于节点)。
对于入口点或桶模块,前缀可用于为导出提供范围:
export { default as hookStartSession } from "./hooks/start-session";这通常是在导入有一定范围时这样做的,至少当包公开额外的公共入口点时是这样的。
import { startSession } from "packageX/hooks"https://stackoverflow.com/questions/66807473
复制相似问题