JS 中的范围导出

Scoped Exports in JS

一旦我们 exportJS 中的东西。例如,在一个名为 foo.js 的文件中,我们有一行内容为::

export default foo;

我们可以从我们想要的任何文件全局导入它。但是,如果需要避免它怎么办。

这是一个问题陈述:

有没有办法定义一个范围,导出的模块只能在特定级别使用。

如果没有,那么有什么创造性的方法可以解决这个问题吗?

寻找想法以简化开发 problems/experience 大规模 :)

您可以只使用别名来避免命名冲突:

import {
  foo,
} from './some/path';

import {
  foo as bar,
} from './some/other/path';

但是,是的,大多数库都有一个导出子模块功能的入口点(通常为 index.js),您所要做的就是不导出要隐藏的模块。现在当然,有人仍然可以通过在 node_modules 文件夹中指定路径来直接导入您想要隐藏的子模块,但这样做的人是 a) 愚蠢地依赖非 public API 和 b) 可能在足够高的水平上玩以避免那种错误。

至于直接使用的应用程序代码,只需将其包装在您添加到 package.json 的库中,例如a git url,或者简单地注释代码或更改名称。 Typescript 也可以提供帮助,如果函数具有不同的类型签名,则无法在您想要的地方使用一个。

但最后,最简单的方法就是对您的开发人员同事有一点信心:为了防止人们犯他们不太可能犯的错误,付出了太多太多的努力。

根据评论编辑

导入可以像这样命名空间:

import * as Whatever from 'some-module';

Whatever.someFn();