vue項目--vscode代碼美化(格式化)和eslint配置詳情

vscode和eslint的配置極其繁瑣,為了不勞民傷財是目,本著救天下程序員于水深火熱之中的宏愿谤饭,地獄不空,誓不成佛懊纳,特施恩于爾等揉抵。(怎么就沒表情符號可用呢,這讓我如何嘚瑟嗤疯?看來只能說:你來打我撒T┙瘛)

eslint與vscode相輔相成,再也不怕代碼不規(guī)范了茂缚,任你怎么亂寫戏罢,保存代碼后可手動或是自動格式化代碼!

一阱佛、需要用到的vscode插件:

1帖汞、ESLint,Vetur(必須)

2凑术、以下插件就是自己的喜好羅翩蘸,有助于美化樣式和輔助提示(用了才知道,那個不痛淮逊,月月輕松4呤住)。

  • Auto Close Tag(自動標(biāo)簽閉合)泄鹏,

  • Auto Rename Tag(標(biāo)簽重命名)郎任,

  • Bracket Pair Colorizer 2(成對括號顏色標(biāo)記),

  • GitLens--Git supercharged(git代碼提交歷史信息)备籽,

  • Highlight Matching Tag(高亮匹配的成對標(biāo)簽)舶治,

  • HTML CSS Support(樣式屬性提示)

  • HTML Snippets(html標(biāo)簽提示)

  • Prettier - Code formatter(代碼美化工具分井,下載了vuter,就沒必要下載它了)

  • Path Intellisense(路徑補全提示)

  • vscode-icons(文件圖標(biāo)樣式)

二霉猛、好了尺锚,你也是夠了,上代碼惜浅!配置詳情如下瘫辩。

vscode > settings.json(文件 > 首選項 > 設(shè)置 > 在settings.json中編輯;編輯器左下方設(shè)置圖標(biāo)也可進入配置坛悉。)


{

    "editor.tabSize": 4,

    "editor.detectIndentation": false,

    "files.autoSave": "onWindowChange",

    "editor.fontSize": 16,

    "editor.autoClosingBrackets": "always",

    "editor.autoClosingQuotes": "beforeWhitespace",

    "editor.codeActionsOnSave": null,

    "editor.padding.bottom": 30,

    "editor.padding.top": 30,

    "editor.showFoldingControls": "mouseover",

    "workbench.preferredLightColorTheme": "One Monokai",

    "workbench.colorTheme": "One Monokai",

    "workbench.preferredDarkColorTheme": "One Monokai",

    "workbench.editor.highlightModifiedTabs": true,

    "window.autoDetectHighContrast": false,

    "explorer.sortOrder": "type",

    "extensions.closeExtensionDetailsOnViewChange": true,

    "terminal.integrated.cursorBlinking": true,

    "terminal.integrated.copyOnSelection": true,

    "terminal.integrated.cursorStyle": "line",

    "terminal.integrated.cursorWidth": 2,

    "breadcrumbs.enabled": true,

    "eslint.format.enable": true,

    "editor.formatOnSave": true,

    "editor.formatOnPaste": true,

    "editor.formatOnType": true,

    "eslint.probe": [

        "javascript",

        "javascriptreact",

        "typescript",

        "typescriptreact",

        "html",

        "vue",

        "markdown"

    ],

    "eslint.validate": [

        "javascript",

        "javascriptreact",

        "typescript",

        "typescriptreact",

        "html",

        "vue",

        "markdown"

    ],

    "[javascript]": {

        "editor.defaultFormatter": "dbaeumer.vscode-eslint"

    },

    "[json]": {

        "editor.defaultFormatter": "dbaeumer.vscode-eslint"

    },

    "[vue]": {

        "editor.defaultFormatter": "octref.vetur"

    },

    "vetur.completion.autoImport": true,

    "vetur.format.defaultFormatter.html": "prettyhtml",

    "vetur.format.defaultFormatter.css": "prettier",

    "vetur.format.defaultFormatter.postcss": "prettier",

    "vetur.format.defaultFormatter.scss": "prettier",

    "vetur.format.defaultFormatter.less": "prettier",

    "vetur.format.defaultFormatter.stylus": "stylus-supremacy",

    "vetur.format.defaultFormatter.js": "prettier",

    "vetur.format.defaultFormatter.ts": "prettier",

    "vetur.format.defaultFormatter.sass": "sass-formatter",

    "vetur.format.options.tabSize": 4,

    "vetur.format.options.useTabs": false,

    "vetur.format.defaultFormatterOptions": {

        "prettier": {

            "semi": false,

            "useTabs": false,

            "singleQuote": true,

            "tabWidth": 4,

            "vueIndentScriptAndStyle": true,

            "bracketSpacing": true,

            "arrowParens": "avoid",

            "trailingComma": "none"

        },

        "prettyhtml": {

            "wrapAttributes": false,

            "usePrettier": true,

            "tabWidth": 4,

            "useTabs": false,

            "printWidth": 200, 

            "singleQuote": false

        },



        "sass.format.debug": false,

        "sass.format.deleteEmptyRows": true,

        "sass.format.deleteWhitespace": true,

        "sass.format.convert": true,

        "sass.format.setPropertySpace": true

    },

    "prettier.useTabs": false,

    "prettier.singleQuote": true,

    "prettier.semi": false,

    "prettier.tabWidth": 4,

    "prettier.vueIndentScriptAndStyle": true,

    "prettier.bracketSpacing": true,

    "prettier.arrowParens": "avoid",

    "prettier.trailingComma": "none"

}

三伐厌、ESLint配置如下(配置項及其之多,要想明白每一項的配置裸影,花點時間可是不少罢豕臁)

  • .eslintrc.js,項目根目錄下新建此文件轩猩。
  • 下載所需的npm包:eslint刃唐,eslint-friendly-formattereslint-loader界轩,eslint-plugin-html画饥,eslint-plugin-vue
  • 說明:extends: ['eslint:recommended', 'plugin:vue/essential'],eslint:recommended表示eslint的默認(rèn)生效的規(guī)則,下面rules的規(guī)則大多不在默認(rèn)項中浊猾,或是對規(guī)則有自己的配置抖甘,畢竟是和vscode配合使用,最終要在保存的時候一鍵格式化的葫慎,有些eslint默認(rèn)配置與vuter格式化工具規(guī)定的不一樣衔彻,所以需要修改eslint的配置。

module.exports = {

        root: true,

        parserOptions: {

            parser: 'babel-eslint',

            sourceType: 'module',

            allowImportExportEverywhere: true

        },

        env: {

            browser: true,

            node: true,

            es6: true

        },

        extends: ['eslint:recommended', 'plugin:vue/essential'],

        plugins: [

            'html',

            'vue'

        ],

        'rules': {

            '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'],

            'curly': [2, 'multi-line'],

            'dot-location': [2, 'property'],

            'eol-last': [2, 'always'],

            'eqeqeq': [2, 'always', {

                'null': 'ignore'

            }],

            'generator-star-spacing': [2, {

                'before': true,

                'after': true

            }],

            'handle-callback-err': [2, '^(err|error)$'],

            'indent': ['error', 4, {

                'SwitchCase': 1,

                'VariableDeclarator': 1,

                'MemberExpression': 1

            }],

            'vue/script-indent': ['error', 4, {

                'baseIndent': 0,

                '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-class-assign': 2,

            'no-eval': 2,

            'no-extra-parens': [2, 'functions'],

            'no-implied-eval': 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, 'smart-tabs'],

            'no-multi-spaces': [2, {

                'ignoreEOLComments': true

            }],

            'no-multi-str': 2,

            'no-multiple-empty-lines': 2,

            'no-new-require': 2,

            'no-octal-escape': 2,

            'no-path-concat': 2,

            'no-proto': 2,

            'no-return-assign': [2, 'except-parens'],

            'no-self-compare': 2,

            'no-sequences': 2,

            'no-spaced-func': 2,

            'no-throw-literal': 2,

            'no-trailing-spaces': 2,

            'no-undef-init': 2,

            'no-unmodified-loop-condition': 2,

            'no-unused-vars': [2, {

                'vars': 'all',

                'args': 'none'

            }],

            'no-useless-call': 2,

            'no-useless-computed-key': 2,

            'no-useless-constructor': 2,

            'no-whitespace-before-property': 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'],

            'wrap-iife': [2, 'any'],

            'yoda': [2, 'never'],

            'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,

            'object-curly-spacing': [2, 'always', {

                objectsInObjects: false

            }],

            'array-bracket-spacing': [2, 'never']

        }

    }

四偷办、其實我的配置可以滿足三種格式化艰额,分別是 eslintvuter椒涯,prettier-code formatter柄沮,這三種可以選擇,在編輯器中右鍵選擇‘文檔格式化設(shè)置方式’废岂,即可任意設(shè)置默認(rèn)的格式化方式祖搓,但是,推薦選擇vuter湖苞,因為要理解vscode的難處嘛拯欧。

五、 "editor.formatOnSave": true财骨,可以設(shè)置是否在保存代碼時自動格式化镐作,看你自己羅藏姐,老項目不推薦自動格式化哦!

六该贾、最后包各,配置完成后,嘗試下:右鍵 > 格式化文檔靶庙。實踐才是檢驗真理的唯一標(biāo)準(zhǔn)。如果一切順利娃属,你將看到按照eslint規(guī)則格式化和按照vuter美化的代碼六荒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市矾端,隨后出現(xiàn)的幾起案子掏击,更是在濱河造成了極大的恐慌,老刑警劉巖秩铆,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砚亭,死亡現(xiàn)場離奇詭異,居然都是意外死亡殴玛,警方通過查閱死者的電腦和手機捅膘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滚粟,“玉大人寻仗,你說我怎么就攤上這事》踩溃” “怎么了署尤?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長亚侠。 經(jīng)常有香客問我曹体,道長,這世上最難降的妖魔是什么硝烂? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任箕别,我火速辦了婚禮,結(jié)果婚禮上滞谢,老公的妹妹穿的比我還像新娘究孕。我一直安慰自己,他們只是感情好爹凹,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布厨诸。 她就那樣靜靜地躺著,像睡著了一般禾酱。 火紅的嫁衣襯著肌膚如雪微酬。 梳的紋絲不亂的頭發(fā)上绘趋,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機與錄音颗管,去河邊找鬼陷遮。 笑死,一個胖子當(dāng)著我的面吹牛垦江,可吹牛的內(nèi)容都是我干的帽馋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼比吭,長吁一口氣:“原來是場噩夢啊……” “哼绽族!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衩藤,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤吧慢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赏表,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體检诗,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年瓢剿,在試婚紗的時候發(fā)現(xiàn)自己被綠了逢慌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡间狂,死狀恐怖涕癣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情前标,我是刑警寧澤坠韩,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站炼列,受9級特大地震影響只搁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜俭尖,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一氢惋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稽犁,春花似錦焰望、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至虑椎,卻和暖如春震鹉,著一層夾襖步出監(jiān)牢的瞬間俱笛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工传趾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留迎膜,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓浆兰,卻偏偏與公主長得像磕仅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子簸呈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348