规范代码,提升开发效率,5大绝招解决你的痛点

  1. 使用eslint规范检测

一般在团队开发中每个人的代码习惯都不太一样,这样就会导致代码风格不一致,以致于维护和修改bug的时候看别人的代码灰常痛苦。使用eslint规范代码,统一代码风格。

  1. stylelint规范css代码

说到代码格式化前端同学们一般都知道使用eslint格式化js代码,但css大部分同学平时工作中不太重视,导致团队css代码较乱。一套好的css代码不仅可以提高代码可维护性还能提高页面的渲染性能。下面介绍下stylelint校验并自动格式化css代码。

stylelint主要包含以下功能

  • 支持最新css语法-包含自定义属性和一些Level 4的css属性
  • 支持css预处理-包含scss、sass、less、sugarss
  • 包含170中内置规则-包含错误检测和代码风格校验
  • 插件机制-可以自定义自己的规则
  • 自动修复

安装

npm install --save-dev stylelint stylelint-config-standard stylelint-config-recess-order stylelint-order

配置

项目跟目录下新建.stylelintrc.json文件,配置如下

'use strict';
  
module.exports = {  
  "extends": ["stylelint-config-recommended"], 
  "rules":{  
      "unit-no-unknown": false,  
      "unit-no-unknown": true,    //禁止未知单位  
      "indentation": null,       //缩进  
      "color-hex-case": [  
        "lower", {  
        "message": "Lowercase letters are easier to distinguish from numbers"  
        }  
      ],  
      "max-empty-lines": 2,  
      "unit-whitelist": ["em", "rem", "%", "s", "px", "upx", "deg"],  
      "number-leading-zero": null,
      "function-calc-no-invalid": null,
      "no-descending-specificity": null,
      "selector-pseudo-class-no-unknown": null,
      "selector-type-no-unknown": null,
      "at-rule-no-unknown": null,
      "font-family-no-missing-generic-family-keyword": null
  }  
} 

属性顺序

除了格式化方面的检测css属性顺序编写也很重要,正确的样式顺序利于维护者查看同时还对渲染性能有一定提升。一般建议css顺序如下:

(1)定位属性:position  display  float  left  top  right  bottom   overflow  clear   z-index
(2)自身属性:width  height  padding  border  margin   background
(3)文字样式:font-family   font-size   font-style   font-weight   font-varient   color   
(4)文本属性:text-align   vertical-align   text-wrap   text-transform   text-indent    text-decoration   letter-spacing    word-spacing    white-space   text-overflow
(5)css3中新增属性:content   box-shadow   border-radius  transform

css顺序校验需要添加stylelint-order插件同时使用stylelint-config-recess-order预设。通过以下配置我们就不需要记这么多css属性书写顺序了。

"extends": ["stylelint-config-recommended", "stylelint-config-recess-order"], 
 "plugins": [
    "stylelint-order"
  ],

自动格式化

上面介绍了stylelint发现有问题的代码,但是如果是老项目引入stylelint手动修改的话要是比较耗费时间的,此时自动格式化就尤为重要了。

package.json中添加配置

  "scripts": {
    "lint": "npm run lint:css",
    "lint:css": "stylelint app/build/style/ --fix"
  },
 "pre-commit": [
    "lint"
  ],
  1. 配置路径别名

模块化开发项目中,比如vue和react等,经常需要import不同的js或者css模块到当前目录,那么如果路径比较深的话使用相对路径就比较麻烦,而且在文件迁移的时候,如果在不同的目录下边,又得改变以下引入的路径。所以我们可以使用webpack配置路径别名,在引入的时候我们直接使用这个别名,就可以正确的指向。

配置

在webpack.config.js中的resolve下的alias属性做以下配置:

resolve: {
        extensions: ['.js', '.jsx', '.json', '.less'],
        alias: {
            '@app': path.resolve('app'),
            '@components': path.resolve('app/build/components'),
            '@images': path.resolve('app/build/images'),
            '@common': path.resolve('app/build/common'),
            '@actions': path.resolve('app/build/actions'),
            '@enums': path.resolve('app/enums'),
            '@styles': path.resolve('app/build/style')
        }
    },

如果需要智能提示跳转到指定文件
需要在根目录下添加jsconfig.js文件,并做如下配置

{
    "compilerOptions": {
      "baseUrl": "./",
      "paths": {
        "@app/*": ["app/*"],
        "@components/*": ["app/build/components/*"],
        "@images/*": ["app/build/images/*"],
        "@common/*": ["app/build/common/*"],
        "@actions/*": ["app/build/actions/*"],
        "@enums/*": ["app/enums/*"],
        "@styles/*": ["app/build/style/*"]
      },
      "target": "ES6",
      "module": "commonjs",
      "jsx": "react",
      "allowSyntheticDefaultImports": true
    },
    "include": [
      "app/**/*"
    ],
    "exclude": ["node_modules"]
  }

然后使用

  • @components就可以指向到app/build/components
  • @common指向到app/build/common

使用:

import MultiLockedButton from '@components/view/customer/multi_locked_button.jsx';
import { fetch } from '@common/api';
  1. react项目中,告别binding,支持箭头函数

安装依赖

npm install --save-dev babel-plugin-transform-class-properties

.babelrc中添加配置

"plugins": [ "transform-class-properties"]

使用方法

// 查询
  const handleSearch = (formData) => {
       //your code
   };

5、react项目中支持async

安装依赖

npm install --save-dev babel-plugin-transform-runtime

.babelrc中添加配置

"plugins": ["transform-runtime"]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352