vscode從據說到使用,vetur,prettier,htmljscssPrettify踩坑指南。

今天基於vue-cli(2.9.3)構建一個新的項目。我用的sublime,es6的代碼格式要與公司格式兼容。採用了vue-cli自帶的eslint後,有一些不統一的部分須要修改。先看看sublime裏須要怎麼處理:javascript

首先,在項目根目錄下找到.eslintrc.js,在rules節點下新增兩個配置項css

'semi': [2, 'always'],
    // 默認空格4個
    'indent': ['error', 4, {'SwitchCase': 1}]
  }// add your custom rules here
  rules: {
    // allow async-await
    'generator-star-spacing': 'off',
    // allow debugger during development
    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    
    // 如下是新增
    // segment mark,默認格式須要再行尾必須加分號
    'semi': [2, 'always'],
    // 默認空格4個
    'indent': ['error', 4, {'SwitchCase': 1}]
  }

如今運行html

npm run dev

eslint會按照新的規則去檢查代碼。問題是,我這個項目裏,已經有一些代碼寫好了,格式是縮進兩個空格的。vue

那麼若是手動改,不只效率低,並且還容易出錯。我就想找個插件看一下,是否是有自動格式化的工具。在項目java

根目錄下,我找到了editorconfig文件,看到其中的indent_size後,我就修改了其中配置indent_size爲4webpack

indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = trueroot = true

[*]
charset = utf-8
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

那麼這個配置文件是幹嗎用的呢?我就上網查了,看到說是能夠配合各個ide作代碼格式化的。我當時在用sublime,就下載了sublime的EditorConfig插件。發現sublime的確是按照新的格式在寫代碼了,可是舊的代碼仍是沒有給格式化的能力。那麼我就不死心了。我就上網查查看sublime的js格式化插件。找了兩個:jsFormate,html/css/js Prettify,這兩個我都看了,他們對js的格式化,都是基於這個叫js Prettify的插件。因此推薦是用後者,它們也能夠經過簡單的配置,達到基礎的格式化功能。具體作法以下:es6

下載好插件之後,打開配置文件Prettify Preferences Default,web

配置中修改vue-cli

4,

        // ...

        // Should the space before an anonymous function's parens be added, "function()" vs "function ()"
        "space_after_anon_function": true,        // Indentation size
        "indent_size": 4,

        // ...

        // Should the space before an anonymous function's parens be added, "function()" vs "function ()"
        "space_after_anon_function": true,

再打開配置文件Plugin Options - Default, 修改typescript

"vue"],"allowed_file_extensions": ["htm", "html", "xhtml", "shtml", "xml", "svg", "vue"],

這樣就能夠給.vue格式的文件作格式化了。

可是覺得這樣就ok了?並非,發現有個問題,格式化的時候,es6的方法簡寫會被誤認爲方法調用:

{
    // 期待的格式化效果
    mounted () {},
    // 實際的格式化效果
    mounted() {}
}

而後看了好多文檔,在這個jsPrettify裏也沒有這個配置能夠進行修改。而後就吃午餐去了,中午吃飯聽同事說vscode能夠解決這個問題。我下午回來就下載了一個,一試,果真不錯。

vscode會自動檢測個人文件類型,給我推薦插件下載,不須要我再去從網上搜插件,這個功能很人性化。我一打開.vue文件,就推薦了,vetur插件給我用了。我換了一下經常使用的快捷鍵,使用起來很方便。可是核心問題是,,,這個格式化,也沒有解決剛纔的問題,也是少了那個空格。

而後從網上找了找答案,能夠這樣配置:

在vscode中,打開首選項,設置,搜索vetur.format,再右側用戶設置裏,覆寫:

true,
"vetur.format.defaultFormatter.js": "vscode-typescript", //默認是prettier"typescript.format.insertSpaceBeforeFunctionParenthesis": true,
"vetur.format.defaultFormatter.js": "vscode-typescript", //默認是prettier

好了到此,es6方法的語法問題解決了。

而後還有一個問題,就是vue文件中的css部分,語法默認不支持sass,postcss,須要本身配置。我這裏用了postcss:

在項目根目錄下,找到.postcsssrc.js新增一行以下:

'postcss-cssnext': {}
    }
}module.exports = {
    "plugins": {
        "postcss-import": {},
        "postcss-url": {},
        // to edit target browsers: use "browserslist" field in package.json
        "autoprefixer": {},
        'postcss-cssnext': {}
    }
}

若是想用sass能夠再webpack的配置文件裏進行修改。

而後又一個問題,vscode裏,css代碼沒有高亮,看了一下,須要在.vue文件的style標籤裏,加入屬性:

<style lang="postcss">

而後高亮之後,發現vscode的css格式化,縮進仍是兩個空格。

這裏得說一下,這個縮進是vetur插件作的格式化,它格式化的方式使用的是另一個插件,叫prettier,若是想要配置prettier,能夠在項目根目錄下建立一個配置文件:.prettierrc.js

內容以下:

module.exports = {
    tabWidth: 4
};

這裏說下,prettier的配置功能不多,因此,以前修改es6語法,在prettier裏沒有配置,就直接換成了typescript去格式化。

這樣,總體用下來,vscode上手方便,使用便捷,用戶體驗好,量級輕,速度也不錯。再初始化的時候能夠選擇你的開發環境,自動給你安裝好大部分經常使用插件。我估計我之後就放不下它了。也一樣推薦給愛學習的你。

本文完。

相關文章
相關標籤/搜索