配好6个前端规范,CV效率翻倍

举报
yd_244540595 发表于 2024/08/27 15:00:56 2024/08/27
【摘要】 作者:陈佬昔的编程人生虽然大家都知道代码规范很重要,但是真的要落地执行的时候,不少团队没有仔细调查实践,只是简单配置,甚至复制其他公司的规范不加修改就上路了。最后很可能因为某些配置不好用,导致大家的开(C)发(V)效率下降。而这种配置是伴随整个项目生命周期的,像这样配置错了,后期再来修改,就会十分痛苦。这里列出几条会影响大家效率的代码规范,它们的正确配置。希望能帮助大家在项目早期设计好前端规...

作者:陈佬昔的编程人生

虽然大家都知道代码规范很重要,但是真的要落地执行的时候,不少团队没有仔细调查实践,只是简单配置,甚至复制其他公司的规范不加修改就上路了。最后很可能因为某些配置不好用,导致大家的开(C)发(V)效率下降。

而这种配置是伴随整个项目生命周期的,像这样配置错了,后期再来修改,就会十分痛苦。

这里列出几条会影响大家效率的代码规范,它们的正确配置。希望能帮助大家在项目早期设计好前端规范。

顺便吆喝一声机会,技术大厂,前后端捞人

1. 行末必须使用分号

eslint 规则: "semi": ["error", "always"]

80% 的老前端估计都是有写分号习惯的。然而在前端规范发展早期,可能受到python语言影响的,突然出现一派不写分号的规范配置。

行末不带分号,这样写有什么弊端呢?

在我们复制粘贴代码的时候,更多时候使用的是键鼠组合。ctrl + c 复制之后,移动鼠标到某一行,点击将光标置于行末,ctrl + v 粘贴。

然而如果行末不写分号,直接粘贴就报错了。而代码一报错,自动格式化就无效了,这是需要我们手动处理了。或者,在复制完代码后再回来添加换行;亦或者,在开始粘贴前先手动敲一下回车,如果粘贴后发现多了一空行,再删除空行。

整个过程显然比行末带分号的代码要耗时更多。


javascript
代码解读
复制代码
// 错误代码,复制代码后,引起报错,无法使用自动格式化
import componentA from ''import componentB from ''

另外,在这个规则下,复制代码到 return 后,如果多了换行符,自动格式化时,return 后的代码不会合并到 return 这一行。最后 return 会返回一个空对象,导致整个程序都出 bug。


csharp
代码解读
复制代码
// 复制内容到 return 后无法自动合并成一行,可能会引起程序 bug。
function doSomething() {
  return 
  somthing 
}

2. 对象,数组行末允许逗号

eslint 规则: "comma-dangle": ["error", "always-multiline"]

同上,如果不这么做的话,每次复制过来,都会因为报错导致自动格式化失效,需要自行修改添加逗号。

还有用快捷键 Alt + ⬆️/⬇️ 移动代码块的时候也需要做额外的处理。


arduino
代码解读
复制代码
// 正确示范
export default {
  components: {
    // 可以轻松的将 commonComponentC 复制到任何一行
    commonComponentA,
    thisPageComponentA,
    thisPageComponentB,
    commonComponentB, // 可以轻松地将 commonComponentB 上移,归类
  }
}

3. if else 必须带上花括号

eslint 规则:"brace-style": ["error", "1tbs", { "allowSingleLine": false }]

同上,如果不这么做的话,复制的时候,还需要阅读前后代码,才能避免不出错。而这种出错甚至是致命性的bug,有可能整个业务逻辑都受影响。


kotlin
代码解读
复制代码
// 错误例子,不添加花括号,容易引起误解
if (condition) return
if (condition2) return array2
​
// 解读1
if (condition) { return null }
if (condition2) { return array2 }
​
// 解读2
if (condition) {
  return {
    if (condition2) { return array2 }
  }
} 

为了快速地复制移动代码,还是建议代码规范中加上此规则吧。

4. 参数必须带括号,即使只有一个

eslint 规则:"arrow-parens": ["error", "always"]

prettier 配置项: --arrow-parens=always

我们都知道,参数越少越好。然而谁也无法料想到,后续需求的发展。

常有的情况是,为了不影响原有的程序运行,需要在这个对象外新增加一个参数。如果你配置了 as-needed, 仅有一个参数时就会省略括号,问题就出现了。


csharp
代码解读
复制代码
// 报错
const getList = params => {
  const res = await axios.get('...', params);
}
​
// 新增参数报错,自动格式化失效
const getList = params,total => {
  const res = axios.get('...', params)
  total = res.data.total
}

而且这样配置,没有参数的时候,这个括号也是不省略的,就会给人很奇怪的感觉。


dart
代码解读
复制代码
// 没有参数,括号不能省略
const getList = () =>  axios.get('...')

所以,还是把不省略括号给配置上吧。

5. html 对空格不敏感

prettier 配置项:--html-whitespace-sensitivity = ignore

前端代码在打包的时候会经过压缩的过程。这是一段普通的html代码:


css
代码解读
复制代码
<html>
  <body>
    <button>按钮1</button>
    <button>按 钮 2</button>
  </body>
</html>

压缩后的代码如下:


xml
代码解读
复制代码
<!-- 这是敏感的 -->
<html><body> <button>按钮1</button> <button>按 钮 2</button> </body></html>
<!-- 这是不敏感的 -->
<html><body><button>按钮1</button><button>按 钮 2</button></body></html>

可以看到。如果设置了html 对空格不敏感,html之间的空格就会被删除,那样我们就可以放心大胆地复制 html 代码了。

然而,不少人会说,这样设置影响到了行内元素之间的间距,应该怎么处理呢?

当然是用 css 完完全全去控制样式。把样式完全交给 css 处理, 这样可以得到更精确的距离。内边距用padding,外边距用 margin,字之间的间隙用 letter spacing。

这样是不是效率更慢了?

并没有,通常来说,这种样式写一个公共样式就够了。如,每个按钮之间需要空隙,可以用相邻节点选择器来解决。


css
代码解读
复制代码
button + button {
 margin-left: 10px
}

总之,办法总比问题多,而且都是少量的处理。

另外,如果设置了html 对空格敏感,还会出现莫名其妙的十分丑陋的 html 排版,让人抓狂。


less
代码解读
复制代码
<html>
  <body>
    <button
       onClick=“window.open('...')”
         >按钮1属性太长需要换行</button>
    <button
         >按钮2因自身太长自身太长自身太长自身太长需要换行</button>
  </body>
</html>

鉴于此,html 对空格不敏感,是最好的选择

6. CSS 中禁用 !important

Stylelint 规则:keyframe-declaration-no-important

我们都知道,CSS 是通过选择器的优先级来决定最终显示的样式的,然而使用 !important 后,浏览器会忽略通常应用于该样式的任何继承或嵌套规则。

如果贪一时方便,使用了!important,就会给我们带来不必要的麻烦。


css
代码解读
复制代码
.button1 {
 color: blue !important;
}
​
.componentA .button1 {
 color: red; /*按钮样式再也不生效了*/
}

因为 !important 打破了原有的优先级,导致从其他地方复制过来的 css,就需要做调整。

所以我们应该优先考虑更优雅、层次化的结构和适当的类选择来避免冲突,以确保代码的可读性和长期可维护性。而不是使用 !important。

总结

  1. 前端 javascript 的虽然允许不写很多符号,但是把符号写完整,能大量提高我们的 CV 效率。
  2. 而对 html 空格不敏感,除了切实地让样式与结构分离,也能提高我们 CV 效率。
  3. 对 CSS 禁用 !important,除了能有更好维护的代码,也能让我们更好地跨页面 CV 样式。

总之,代码规范配置会影响整个项目周期,我们在制定规范的时候,应该多尝试对比后,再将其落地。代码可读性增强和效率提高不应该是一个矛盾体,两者中可以取得很好的平衡。

以上就是我总结的几条影响大家cv效率的代码规范。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。