早期做爲一個小白,學習的時候,寫代碼都是很粗獷的,也疏於管理
本身一我的作項目可能還不以爲什麼,可是到了公司中,大量語法層面的錯誤以及不規範的格式是不被容忍的
同時本身也開始思考,如何能造成更好的工做流,提高代碼質量,加快編寫速度,增長書寫的容錯率javascript
本文會介紹使用git進行版本控制和多人協做,以及用eslint和stylelint進行自動格式修復,對於.vue文件實現html,js,scss全覆蓋檢測
編輯器使用的是vscode,把這些整合的很好css
從官網下載對應的exe進行安裝便可html
只要這邊改爲第一個,保證安全性,其餘就一路next就能夠了前端
在系統高級設置中,點擊環境變量
在系統變量的path中,新建一條,屬性爲安裝的git的bash的文件夾的位置 好比 C:\git\Git\binvue
右鍵打開git bash,進行全局配置java
$ git config --global user.name "name" //填名字
$ git config --global user.email 123@163.com //郵箱
複製代碼
user.name還有email 後面必定記得加空格
若是要查看當前用戶,直接輸入node
$ git config user.name
複製代碼
若是要修改當前項目的用戶,不加--global便可react
$ git config user.name "name" //填名字
複製代碼
爲了使用公司的gitlab,咱們就得生成ssh
首先看看本身的c:/Users/xxxx/.ssh/目錄,有沒有id_rsa.pub文件,若是沒有的話,打開git bash,輸入git
ssh-keygen -t rsa -C "你的公司或我的郵箱"
複製代碼
直接三個回車,就完成了ssh的生成
而後把id_rsa.pub的內容全選複製,到gitlab網站上,登錄帳號後,打開Profile Settings -> SSH Keys
粘貼公鑰並 點擊Addkey,便可完成SSH配置es6
vscode,內置是有git的,不過咱們須要把它關聯到安裝的git路徑才行
在編輯器的文件->首選項->設置->搜索git.path->點擊編輯->找到git的安裝目錄裏面的bin文件夾,裏面的git.exe文件,把該文件的完整路徑複製下來
"git.path":"C:\git\Git\bin\git.exe"
複製代碼
若是不記得git的安裝目錄在哪,可使用命令行輸入
where git
複製代碼
關聯完成後,就能夠愉快在vscode中直接使用git了,不用再去敲命令行
在代碼倉庫頁面上,新建一個本身的分支,好比命名dev_gyf,點擊clone,選擇ssh方式複製
在本地新建文件夾,git bash中輸入
$ git clone 剛纔複製的內容
複製代碼
克隆下來的代碼倉庫,名字默認是origin(後面會用到)
也能夠再手動添加別的倉庫
$ git remote add shortname url
複製代碼
$ git branch dev_gyf //建立分支
$ git checkout dev_gyf //切換到新的這個分支上
$ git checkout -b dev_gyf //也能夠兩句合寫
$ git push --set-upstream origin dev_gyf //將dev_gyf與遠端的dev_gyf關聯
複製代碼
也能夠在vscode中,點擊左下角的分支
查看本地以及遠端的分支,點擊遠程的dev_gyf分支,就會在本地自動新建一個dev_gyf分支,並與遠端分支關聯在本地的dev_gyf分支開發完畢後就要提交代碼了
$ git add .
$ git commit -m 'xxx'
複製代碼
vscode的話直接在git面板點個勾就行了
在提交代碼前,先在本地解決一下衝突
若是遠端的dev_gyf是由release分支建立出來的,你們都在基於這個分支爲基礎作開發的話
就拉取release分支並merge
$ git pull origin release
複製代碼
可能會有衝突,能夠在vscode中手動解決
解決以後,就能夠提交到遠端的dev_gyf分支了,直接
$ git push
複製代碼
若是有遇到問題,能夠加上 -f 執行強推,由於是隻有本身在用的遠端分支,因此能夠這麼作
提交完畢後,在gitlab上發起merge請求,合到主分支上就好了
在公司中,常常會碰到這樣的狀況
完成了一個需求任務a,發給主管和測試看了,還在等回覆,可能會有修改
不過等的時候也不想閒着,想作另外一個需求任務b 但任務a是急着上線的,任務b並非,因此不能讓任務b代碼去污染已經作好的部分
此時就須要分支了,分支的做用就是保證開發的穩定性,以及分離需求
用上面的方法,本地新建一個dev_gyf_test分支,來作新的需求
等到需求作好後,再合到本地的dev_gyf分支
$ git checkout dev_gyf
$ git merge dev_gyf_test
複製代碼
合完以後刪除test分支
$ git branch -d dev_gyf_test
複製代碼
$ git log
$ git log -a //更詳細
複製代碼
在vscode中,安裝gitlens插件,便可更直觀地看到歷史,並進行版本比對
首先,全局安裝eslint
npm i -g eslint
複製代碼
並在vscode中,安裝eslint插件 在項目最外層目錄上,生成eslint.js
eslint --init
複製代碼
而後在文件中進行rules的設置 也能夠把別人寫好的eslint規則文件複製過來
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint',
sourceType: 'module'
},
env: {
browser: true,
node: true,
es6: true,
},
extends: ['plugin:vue/recommended', 'eslint:recommended'],
rules: {
"vue/max-attributes-per-line": [2, {
"singleline": 10,
"multiline": {
"max": 1,
"allowFirstLine": false
}
}],
"vue/singleline-html-element-content-newline": "off",
"vue/multiline-html-element-content-newline":"off",
"vue/name-property-casing": ["error", "PascalCase"],
"vue/no-v-html": "off",
'accessor-pairs': 2,
'arrow-spacing': [2, {
'before': true,
'after': true
}],
'block-spacing': [2, 'always'],
'brace-style': [2, '1tbs', {
'allowSingleLine': true
}],
'camelcase': [0, {
'properties': 'always'
}],
'comma-dangle': [2, 'never'],
'comma-spacing': [2, {
'before': false,
'after': true
}],
'comma-style': [2, 'last'],
'constructor-super': 2,
'curly': [2, 'multi-line'],
'dot-location': [2, 'property'],
'eol-last': 2,
'eqeqeq': ["error", "always", {"null": "ignore"}],
'generator-star-spacing': [2, {
'before': true,
'after': true
}],
'handle-callback-err': [2, '^(err|error)$'],
'indent': [2, 2, {
'SwitchCase': 1
}],
'jsx-quotes': [2, 'prefer-single'],
'key-spacing': [2, {
'beforeColon': false,
'afterColon': true
}],
'keyword-spacing': [2, {
'before': true,
'after': true
}],
'new-cap': [2, {
'newIsCap': true,
'capIsNew': false
}],
'new-parens': 2,
'no-array-constructor': 2,
'no-caller': 2,
'no-console': 'off',
'no-class-assign': 2,
'no-cond-assign': 2,
'no-const-assign': 2,
'no-control-regex': 0,
'no-delete-var': 2,
'no-dupe-args': 2,
'no-dupe-class-members': 2,
'no-dupe-keys': 2,
'no-duplicate-case': 2,
'no-empty-character-class': 2,
'no-empty-pattern': 2,
'no-eval': 2,
'no-ex-assign': 2,
'no-extend-native': 2,
'no-extra-bind': 2,
'no-extra-boolean-cast': 2,
'no-extra-parens': [2, 'functions'],
'no-fallthrough': 2,
'no-floating-decimal': 2,
'no-func-assign': 2,
'no-implied-eval': 2,
'no-inner-declarations': [2, 'functions'],
'no-invalid-regexp': 2,
'no-irregular-whitespace': 2,
'no-iterator': 2,
'no-label-var': 2,
'no-labels': [2, {
'allowLoop': false,
'allowSwitch': false
}],
'no-lone-blocks': 2,
'no-mixed-spaces-and-tabs': 2,
'no-multi-spaces': 2,
'no-multi-str': 2,
'no-multiple-empty-lines': [2, {
'max': 1
}],
'no-native-reassign': 2,
'no-negated-in-lhs': 2,
'no-new-object': 2,
'no-new-require': 2,
'no-new-symbol': 2,
'no-new-wrappers': 2,
'no-obj-calls': 2,
'no-octal': 2,
'no-octal-escape': 2,
'no-path-concat': 2,
'no-proto': 2,
'no-redeclare': 2,
'no-regex-spaces': 2,
'no-return-assign': [2, 'except-parens'],
'no-self-assign': 2,
'no-self-compare': 2,
'no-sequences': 2,
'no-shadow-restricted-names': 2,
'no-spaced-func': 2,
'no-sparse-arrays': 2,
'no-this-before-super': 2,
'no-throw-literal': 2,
'no-trailing-spaces': 2,
'no-undef': 2,
'no-undef-init': 2,
'no-unexpected-multiline': 2,
'no-unmodified-loop-condition': 2,
'no-unneeded-ternary': [2, {
'defaultAssignment': false
}],
'no-unreachable': 2,
'no-unsafe-finally': 2,
'no-unused-vars': [2, {
'vars': 'all',
'args': 'none'
}],
'no-useless-call': 2,
'no-useless-computed-key': 2,
'no-useless-constructor': 2,
'no-useless-escape': 0,
'no-whitespace-before-property': 2,
'no-with': 2,
'one-var': [2, {
'initialized': 'never'
}],
'operator-linebreak': [2, 'after', {
'overrides': {
'?': 'before',
':': 'before'
}
}],
'padded-blocks': [2, 'never'],
'quotes': [2, 'single', {
'avoidEscape': true,
'allowTemplateLiterals': true
}],
'semi': [2, 'never'],
'semi-spacing': [2, {
'before': false,
'after': true
}],
'space-before-blocks': [2, 'always'],
'space-before-function-paren': [2, 'never'],
'space-in-parens': [2, 'never'],
'space-infix-ops': 2,
'space-unary-ops': [2, {
'words': true,
'nonwords': false
}],
'spaced-comment': [2, 'always', {
'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
}],
'template-curly-spacing': [2, 'never'],
'use-isnan': 2,
'valid-typeof': 2,
'wrap-iife': [2, 'any'],
'yield-star-spacing': [2, 'both'],
'yoda': [2, 'never'],
'prefer-const': 2,
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
'object-curly-spacing': [2, 'always', {
objectsInObjects: false
}],
'array-bracket-spacing': [2, 'never']
}
}
複製代碼
而後在eslint的setting中設置路徑
並添加設置"eslint.validate": [ //開啓對.vue,.html文件中錯誤的檢查
"javascript",
"javascriptreact",
{
"language": "html",
"autoFix": true
},
{
"language": "vue",
"autoFix": true
}
],
]
複製代碼
而後打開eslint的autoFixOnSave選項,就能夠用eslint來進行自動格式化了
有了eslint檢測js,html,vue,不過css就要用到css的檢測工具:stylelint
全局安裝
npm i -g styelint
複製代碼
在項目中安裝stylelint-config-standard(官方的標準規則),stylelint-order(對css規則順序作要求),stylelint-scss(scss拓展),後面兩個可選,根據你的項目要求
npm i -d stylelint-config-standard
npm i -d stylelint-order
npm i -d stylelint-scss
複製代碼
在項目根目錄新建.stylelintrc.json文件,複製如下內容
{
"extends": "stylelint-config-standard",
"plugins": [
"stylelint-order",
"stylelint-scss"
],
"rules": {
"no-descending-specificity":null,
"block-no-empty": null,
"color-no-invalid-hex": true,
"comment-empty-line-before": [ "always", {
"ignore": ["stylelint-commands", "after-comment"]
}],
"declaration-colon-space-after": "always",
"indentation": ["tab", {
"except": ["value"]
}],
"max-empty-lines": 2,
"rule-empty-line-before": [ "always", {
"except": ["first-nested"],
"ignore": ["after-comment"]
} ],
"unit-whitelist": ["px", "em", "rem", "%", "s","vh","vw"]
}
}
複製代碼
最後,在vscode中安裝插件,stylelint-plus
固然也能夠選擇普通的stylelint插件,不過plus版本有保存即fix的功能
在設置中打開StyleLint:Auto Fix On Save,就能夠在保存代碼的同時自動進行格式修復
完善了本身的工做流後,得益於自動格式修復,開發速度有顯著提高,代碼質量也上去了,更重要的是書寫有了容錯率,能夠提早發現不少語法錯誤,真正的bug也能夠經過git的版本控制來減小污染,經過比對找到bug根源
這是個人我的網站,記錄下前端學習的點滴,歡迎你們參觀
www.ssevenk.com