首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ES6模块中对函数进行分组?

如何在ES6模块中对函数进行分组?
EN

Stack Overflow用户
提问于 2021-03-25 20:54:37
回答 1查看 246关注 0票数 1

如何在ES6模块包中对函数进行分组?在CommonJS包中,您可以这样做。

代码语言:javascript
复制
// package.js
const startSession = require("./startSession");

module.exports = {
  hooks: {
    startSession,
  },
};


// client.js
const { hooks: {startSession } } = require("package");
// OR
const { startSession } = require("package").hooks;

看起来不支持ES6代码中类似的语法。

代码语言:javascript
复制
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中的一个解决方案是这样的。

代码语言:javascript
复制
// package.js
import startSession from "./hooks/start-session";
export const hooks = {
  startSession
};

// client.js
import { hooks } from "package";
const { startSession } = hooks;

但是我想把导入写成一行。也许不可能?

这不是我要找的。

代码语言:javascript
复制
import { hooks } from "package"; const { startSession } = hooks;

这种语法很好,但是如果可能的话,如何设置包呢?

代码语言:javascript
复制
import { startSession } from "packageX/hooks";
import { startSession } from "packageX".hooks;

还有其他建议吗?

答案

下面的埃斯特斯把我推向了正确的方向。这是一个更详细的答案。

代码语言:javascript
复制
// 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";
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-25 21:32:00

ES模块应该进行静态分析,因此不可能从表达式中产生嵌套导入。导入语法并不是析构的,只是外观类似。它是严格规定;如果没有特性,就不支持它。

最好避免这种情况,因为这样可以防止hooks属性被树抖动(目前不适用于节点)。

对于入口点或桶模块,前缀可用于为导出提供范围:

代码语言:javascript
复制
export { default as hookStartSession } from "./hooks/start-session";

这通常是在导入有一定范围时这样做的,至少当包公开额外的公共入口点时是这样的。

代码语言:javascript
复制
import { startSession } from "packageX/hooks"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66807473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档