1. 程式人生 > >vscode從聽說到使用,vetur,prettier,htmljscssPrettify踩坑指南。

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

今天基於vue-cli(2.9.3)構建一個新的專案。es6的程式碼格式要與公司格式相容。採用了vue-cli自帶的eslint後,有一些不統一的部分需要修改。

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

// 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}] }

現在執行

npm run dev

eslint會按照新的規則去檢查程式碼。問題是,我這個專案裡,已經有一些程式碼寫好了,格式是縮排兩個空格的。

那麼如果手動改,不僅效率低,而且還容易出錯。我就想找個外掛看一下,是不是有自動格式化的工具。在專案

根目錄下,我找到了editorconfig檔案,看到其中的indent_size後,我就修改了其中配置indent_size為4

root = 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的外掛。所以推薦是用後者,它們也可以通過簡單的配置,達到基礎的格式化功能。具體做法如下:

下載好外掛以後,開啟配置檔案Prettify Preferences Default,


配置中修改

        // 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, 修改

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

這樣就可以給.vue格式的檔案做格式化了。

但是以為這樣就ok了?並不是,發現有個問題,格式化的時候,es6的方法簡寫會被誤認為方法呼叫:

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

然後看了好多文件,在這個jsPrettify裡也沒有這個配置可以進行修改。然後就吃午飯去了,中午吃飯聽同事說vscode可以解決這個問題。我下午回來就下載了一個,一試,果然不錯。

vscode會自動檢測我的檔案型別,給我推薦外掛下載,不需要我再去從網上搜外掛,這個功能很人性化。我一開啟.vue檔案,就推薦了,vetur外掛給我用了。我換了一下常用的快捷鍵,使用起來很方便。但是核心問題是,,,這個格式化,也沒有解決剛才的問題,也是少了那個空格。

然後從網上找了找答案,可以這樣配置:

在vscode中,開啟首選項,設定,搜尋vetur.format,再右側使用者設定裡,覆寫:

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

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

然後還有一個問題,就是vue檔案中的css部分,語法預設不支援sass,postcss,需要自己配置。我這裡用了postcss:

在專案根目錄下,找到.postcsssrc.js新增一行如下:

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上手方便,使用便捷,使用者體驗好,量級輕,速度也不錯。再初始化的時候可以選擇你的開發環境,自動給你安裝好大部分常用外掛。我估計我以後就放不下它了。也同樣推薦給愛學習的你。

本文完。