JS 中的范围导出
Scoped Exports in JS
一旦我们 export
在 JS
中的东西。例如,在一个名为 foo.js
的文件中,我们有一行内容为::
export default foo;
我们可以从我们想要的任何文件全局导入它。但是,如果需要避免它怎么办。
这是一个问题陈述:
- 考虑
X
是一个包含模块 A
和 B
的应用程序。
- 每个模块
A
和 B
都包含一个文件 parser.js
,其中包含一些同名的导出函数。
- 假设
A
和B
是独立的模块。
- 如果
A
和B
是独立的模块,原则上,模块不应该访问它们范围之外的functions/functionalities。
- 由于导出是全局可用的,在开发过程中,一个人可以访问
parser.js
文件中的函数,并且 he/she 可能会在不知不觉中使用错误的代码段。
有没有办法定义一个范围,导出的模块只能在特定级别使用。
如果没有,那么有什么创造性的方法可以解决这个问题吗?
寻找想法以简化开发 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();
一旦我们 export
在 JS
中的东西。例如,在一个名为 foo.js
的文件中,我们有一行内容为::
export default foo;
我们可以从我们想要的任何文件全局导入它。但是,如果需要避免它怎么办。
这是一个问题陈述:
- 考虑
X
是一个包含模块A
和B
的应用程序。 - 每个模块
A
和B
都包含一个文件parser.js
,其中包含一些同名的导出函数。 - 假设
A
和B
是独立的模块。 - 如果
A
和B
是独立的模块,原则上,模块不应该访问它们范围之外的functions/functionalities。 - 由于导出是全局可用的,在开发过程中,一个人可以访问
parser.js
文件中的函数,并且 he/she 可能会在不知不觉中使用错误的代码段。
有没有办法定义一个范围,导出的模块只能在特定级别使用。
如果没有,那么有什么创造性的方法可以解决这个问题吗?
寻找想法以简化开发 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();