UNPKG

eslint-plugin-file-naming

Version:

eslint文件命名规范惯例插件

236 lines (187 loc) 6.5 kB
# 组件命名eslint插件 > 总结在项目中不同团队人员开发习惯,出现各式各样的命名方式,如以小驼峰命名、大驼峰命名的等等,为了统一命名方式,由此该插件应运而生 针对组件命名规范设计,默认采用组件名称大驼峰命名;禁止对组件名称命名为`index.{vue,tsx,jsx}`或者`Index.{vue,tsx,jsx}`,此外,可根据配置使用命名方式 ## 使用 ```javascript export default [ { name: 'file-naming', plugins: { 'file-naming': componentFile, }, rules: { 'file-naming/component-naming': [ 'error', { '**/src/**/*.{jsx,tsx,vue}': 'PASCAL_CASE', // 对组件统一使用大驼峰 } ], 'file-naming/no-index-naming': [ // 禁止对组件命名index或者Index 'error', '**/src/**/*.{jsx,tsx,vue}' ], } } ] ``` ## 规则 ### no-index-naming 在平时的组件命名方式中,有的喜欢以index为名的组件名称,有的以Index.vue为名的组件名称,还有的会以实际的模块名称命名(推荐), 以模块名为命名主要有利用更加直观的知道该组件的实际作用,此外在使用组件时,一般也会是以大驼峰的形式导出组件,因此,这样可以减少一定的观感疲劳 ```javascript rules: { 'file-naming/no-index-naming': [ // 禁止使用index方式命名 'error', '**/src/**/*.{jsx,tsx,vue}' ], } // 配置多选 rules: { 'file-naming/no-index-naming': [ // 禁止使用index方式命名 'error', ['**/src/**/*.{jsx,tsx,vue}', '**/packages/**/*.{jsx,tsx,vue}'] ], } ``` 除了以上配置组件命名外,你还可以配置任何命名的文件后缀,如`.ts`等 #### 示例 ❎错误 ```javascript // src/components/index.vue // error: Component filename "index.vue" cannot be named "index" or "Index". // src/components/Index.vue //error: Component filename "Index.vue" cannot be named "index" or "Index". ``` ✅正确 ```javascript // src/components/Login.vue // src/components/LoginLog.vue ``` ### component-naming 组件命名方式根据不同人员的习惯会有不同的方式,在此插件中默认以大驼峰的形式命名,如果是一个单词的应以大写开头。 设计的来源主要是,平时在使用组件时,通常以一个大写开头的命名,此外,根据vue官方的推荐,也应该使用驼峰的命名方式; 这样做的好处是避免与原生HTML标签产生歧义,或者如果你不想使用该默认规则可以通过配置,选择合适自身习惯的规则,但是对于团队开发的项目而已,统一的开发规则是很有必要的。 ```javascript rules: { 'file-naming/component-naming': [ 'error', { '**/src/**/*.{jsx,tsx,vue}': 'PASCAL_CASE', // 对组件统一使用大驼峰 } ] } ``` #### 示例 ❎错误 ```javascript // src/components/login.log.vue // error: Component filename "login.log.vue" should be in PASCAL_CASE. // src/components/login-log.vue //error: Component filename "login-log.vue" should be in PASCAL_CASE. ``` ✅正确 ```javascript // src/components/Login.vue // src/components/LoginLog.vue ``` ### folder-naming 文件夹命名规则,默认为`KEBAB_CASE` **如果匹配到文件,将会忽略文件,仅检查文件夹** ```javascript rules: { 'file-naming/folder-naming': [ 'error', { '**/src/**/*': 'KEBAB_CASE', // 对组件统一使用烤肉串 } ] } // 配置多选 rules: { 'file-naming/folder-naming': [ 'error', { '**/src/**/*': 'KEBAB_CASE', // 对组件统一使用烤肉串 '**/component/**/*': 'KEBAB_CASE', // 对组件统一使用烤肉串 } ] } ``` #### 示例 ❎错误 ```javascript // src/page/adminManage/index.vue // error: In the path of the file "src/page/adminManage", the name of the folder "adminManage" does not match "KEBAB_CASE" ``` ✅正确 ```javascript // src/components/index-login.vue // src/components/login-index.vue ``` #### 忽略某项 可以通过配置字段`ignore`,值为一个数组字符串的项来进行忽略某个文件夹 ```javascript rules: { 'file-naming/folder-naming': [ 'error', { '**/src/**/*': 'PASCAL_CASE', // 对组件统一使用烤肉串 '**/component/**/*': 'PASCAL_CASE', // 对组件统一使用烤肉串 ignore: ['table-config', 'button-config'] // 仅支持指定文件夹,不支持glob匹配 } ] } ``` ❎错误 ```javascript // ignore: ['table-config'] // src/components/table-config/button-config/Login.vue // error: In the path of the file "src/components/table-config/button-config", the name of the folder "button-config" does not match "PASCAL_CASE" ``` ✅正确 ```javascript // ignore: ['table-config', 'button-config'] // src/components/table-config/button-config/Login.vue ``` ### filename-naming 文件名命名规则,默认为`CAMEL_CASE` ```javascript rules: { 'file-naming/filename-namin': [ 'error', { '**/src/**/*.{ts,js}': 'CAMEL_CASE', // 对文件.ts、.js统一使用小驼峰 } ] } // 配置多选 rules: { 'file-naming/filename-naming': [ 'error', { '**/src/**/*.{js}': 'CAMEL_CASE', // 对文件.js统一使用小驼峰 '**/pages/**/*.{ts}': 'KEBAB_CASE', // 对文件.ts统一使用烤肉串 } ] } ``` #### 示例 ❎错误 ```javascript // src/components/login-index.ts // error: File 'login-index.ts' with src/components/login-index.ts should to be named 'CAMEL_CASE' ``` ✅正确 ```javascript // src/components/login.ts // src/pages/login-index.ts ``` ## 命名规则 ```javascript CAMEL_CASE // Hello, helloWorld, PASCAL_CASE // Hello, HelloWorld, SNAKE_CASE // hello, hello_world, KEBAB_CASE // hello, hello-world, SCREAMING_SNAKE_CASE // HELLO, HELLO_WORLD, FLAT_CASE // hello, helloworld ```