为了账号安全,请及时绑定邮箱和手机立即绑定

JS 中的范围导出

JS 中的范围导出

芜湖不芜 2022-07-08 10:53:13
一旦我们export在JS. 例如,在一个名为的文件中,foo.js我们有一行说:export default foo;我们可以从我们想要的任何文件中全局导入它。但是,如果需要避免它怎么办。这是一个问题陈述:考虑这X是一个包含模块的应用A程序B。每个模块都A包含B一个文件,该文件parser.js具有一些具有相同名称的导出函数。假设A和B是独立的模块。如果A和B是独立的模块,原则上,模块不应访问其范围之外的功能/功能。由于导出是全球可用的,在开发过程中,一个人可以访问两个parser.js文件中的功能,他/她可能会在不知不觉中使用错误的代码。有没有办法定义一个范围,导出的模块只能在某个级别使用。如果没有,那么有没有创造性的方法来解决这个问题?寻找解决大规模开发问题/经验的想法:)
查看完整描述

1 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

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


import {

  foo,

} from './some/path';


import {

  foo as bar,

} from './some/other/path';

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


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


但归根结底,最简单的方法是对你的开发人员伙伴有一点信心:方法,方法,太多的努力去试图防止人们犯他们不太可能犯的错误。


根据评论编辑

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


import * as Whatever from 'some-module';


Whatever.someFn();


查看完整回答
反对 回复 2022-07-08
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信