Nest.js中的文件命名

16

这个问题是关于Nestjs代码风格的。该框架建议使用小写字母和点之间使用横线作为文件命名。

例如:

文件名为 user.service.ts

export class UserService {
}

另一个文件

import { UserService } from './user.service'

在大多数情况下,每个文件都包含一个类。我发现将此类默认导出,然后使用相同名称导入该文件很方便。

文件名为UserService.ts

export default class UserService {
}

另一个文件

import UserService from './UserService'

因为它更快更简单。

你能说服我不这样做吗?另外,我不明白为什么文件中唯一的实体不作为默认输出。

你能够轻松地使用Nest JS中的文件名吗?

更新:还有一个问题:

如果我的类名由几个单词组成。例如"UserRoleService"。我应该如何命名这个文件?

userrole.service.ts

user-role.service.ts

user_role.service.ts

user.role.service.ts

看起来很奇怪,而且不易读。我认为CamelCase会更好,但这又回到了我们起点。


1
"export default" 不好:https://basarat.gitbook.io/typescript/main-1/defaultisbad - kenberkeley
2个回答

22

我发现了这个老问题,并认为为下一位访问者提供这个答案是值得的。

就像 @Jay McDoiel 提到的,这是一个非常主观的选择。任何一种方式都是正确的。

然而,我发现 NestJS 库使用连字符分隔的 user-role.service.ts 文件命名作为其惯例。

请查看下面附上的图片:

enter image description here


15

这是一个非常主观的问题,值得给出主观的答案。

文件名

文件名之所以被分开,有几个原因。

1)这是Angular的做法,Nest受到了Angular的启发

2)这意味着将大小写字母视为相同的操作系统(如MacOS)不会混淆文件名

3)文件名中的分隔符使得开发人员很容易找到分界点

4)一些文件编辑器中的工具能够根据文件名显示不同的图标。例如 .ts 可能仅表示typescript文件,但 .service.ts 表示用typescript编写的服务文件。(Material Icon Theme 与 VSCode 显示不同的图标)

导出

您提出的另一个问题是命名导出与默认导出之间的区别。除了导入方式不同外,两者之间并没有太大的区别。但要注意的重要一点是,对于命名导出(export class <ClassName>),必须在另一个文件中使用相同的名称导入该类(尽管您可以使用 as 给它起一个别名)。而对于默认导出,您可以将任何内容导出为默认值,每个文件只能导出一次,默认值可以用任何名称在其他文件中导入。因此,如果您想要这样做,可以使用 export default MyClass ,然后使用import SomethingNotRelatedToTheName from path/to/MyClass导入。

如果你对此有强烈的感觉,可以重新编写和重命名文件名和导出,但不要期望Nest为此更改,因为它是一个有主见的框架。

这是一个非常有说服力的答案。我完全同意你的观点,除了其中两个问题似乎对我来说不是很有说服力。我添加了第三个关于驼峰命名法的问题。如果您能查一下,我将不胜感激。 - Stepan Zabelin
8
我喜欢使用“名字-类型-扩展名”这种方式,比如user-role.service.tsogma-core.module.ts,与Nest的文件命名方式相同。对于目录来说也是一样的,使用连字符将多个部分组合成一个名称。 - Jay McDoniel
在添加到导出部分时,将export default转换为cjs有点奇怪,因为必须从该转换包中导入.default - prohit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接