如何优雅地使用vscode来编辑vue文件?

蓝眼睛 蓝眼睛     2022-10-13     169

关键词:

最近有个项目使用了 Vue.js ,本来一直使用的是 PHPStorm 来进行开发,可是遇到了很多问题。

后来,果断放弃收费的 PHPStorm ,改用 vscode (Visual Stdio Code).
当然 vscode 对 vue 也不是原生支持的,今天来扒一扒如何配置 vscode 以便优雅地编辑 vue 文件

先来扒一扒使用 PHPStorm 遇到的问题:

  1. vue文件虽然可以通过插件来解决高亮问题,但是 <script> 标签中的 ES6 代码的识别老是出问题,箭头函数有的时候能正确识别,有的时候会报错

  2. 无法正确识别 vue 文件中的 jsx 语法

  3. 无法正确识别和高亮 vue 文件 <style> 标签中使用的 less 语法

  4. vue文件中 <template> 部分使用了大量的自定义标签(自定义组件)和自定义属性,会报一堆 warning

  5. 经常性卡死

  6. webpack实时编译的错误不能直接展示在代码编辑器内,还得自己到控制台中查看

如何安装 vscode

很简单,传送门:官网下载安装

第一步,要支持 vue 文件的基本语法高亮

这里,我试过好3个插件: vueVueHelper 和 vetur ,最终选择使用 vetur 。

技术分享图片

安装插件: Ctrl + P 然后输入 ext install vetur 然后回车点安装即可。

p.s: vscode 的插件安装比 PHPStorm 的插件安装更快捷方便,安装完成后还不用重启整个程序,只要重新加载下工作区窗口就可以了。

安装完 vetur 后还需要加上这样一段配置下:

"emmet.syntaxProfiles": {
  "vue-html": "html",
  "vue": "html"
}

这时可以打开一个vue文件试试,注意下右下角状态栏是否正确识别为 vue 类型:

技术分享图片

如果被识别为 text 或 html ,则记得要点击切换下。

第二步,要支持 vue 文件的 ESLint

可能还有人会问为什么要 ESLint ?没有 lint 的代码虽然也可能可以正确运行,但是 lint 作为编译前的一道检测成本更小,而且更快。此外, ESLint 还有很多规范是帮助我们写出更加优雅而不容易出错的代码的。

jshint 本来也是个不错的选择,但是 ESLint 对 jsx 的支持让我还是选择了 ESLint.

技术分享图片

安装插件: Ctrl + P 然后输入 ext install eslint 然后回车点安装即可。

ESLint 不是安装后就可以用的,还需要一些环境和配置:

首先,需要全局的 ESLint , 如果没有安装可以使用 npm install -g eslint 来安装。

其次,vue文件是类 HTML 的文件,为了支持对 vue 文件的 ESLint ,需要 eslint-plugin-html 这个插件。可以使用 npm install -g eslint-plugin-html 来安装

接着,安装了 HTML 插件后,还需要在 vscode 中配置下 ESLint:

    "eslint.validate": [
        "javascript",
        "javascriptreact",
        "html",
        "vue"
    ],
    "eslint.options": {
        "plugins": ["html"]
    },

最后,别忘了在项目根目录下创建 .eslintrc.json , 如果还没创建,还可以使用下面快捷命令来创建:

技术分享图片

这样一来 vue 中写的 js 代码也能正确地被 lint 了。

要是不小心少个括号之类的都可以有对应的报错:

技术分享图片

多余 import 也都能报错:

技术分享图片

还是蛮智能的。

第三步,配置构建任务

vue 项目的构建我选择用 webpack ,不过,并不是直接使用命令行下的 webpack 而是使用了 webpack 的 API 写的 node 脚本。 脚本主要有两个,一个是 build/bin/build.js 另一个是 build/bin/watch.js 分别是单次构建和实时构建。

于是乎,对应 vscode 中的 tasks 也是有两个: build 和 watch ,简单配置如下:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    // use `Ctrl+P` and type `task` + SPACE + <taskName> to run a task
    "version": "0.1.0",
    "tasks": [
        {
            "taskName": "build",
            "echoCommand": true,
            "command": "node",
            "args": [
                "build/bin/build.js"
            ],
            "suppressTaskName": true,
            "isBuildCommand": true
        },
        {
            "taskName": "watch",
            "echoCommand": true,
            "command": "node",
            "args": [
                "build/bin/watch.js"
            ],
            "suppressTaskName": true,
            "isBackground": true
        }
    ]
}

这样配置好后,按 Ctrl + Shift + B 即可开始单次构建。 不过单次构建比较慢(要10秒+),一般我都用实时构建:Ctrl + P 然后输入 task watch <回车> 即可开始实时构建。实时构建除了第一次比较慢,其他时候还是非常快的,一般1秒内就可以构建好。

最后,webpack 构建错误提示

webpack 构建失败后一般都会有错误提示,会显示在输出窗口中:

技术分享图片

为啥是彩色的? 因为装了 Output Colorizer 这个插件。
技术分享图片

当然,这样还是不够方便 -- 实时构建是后台运行的,“输出”窗口一般也都是在后台,每次保存完文件还得点开岂不麻烦。

要是能做到像 ESLint 一样直接把错误标到编辑器上面就好了。真的可以吗?翻了下 vscode 的文档,发现有神奇的 problemMatcher -- 可以对任务输出进行解析,解析出的问题会显示在“问题”窗口中,如果还有文件名行号和列号,则会在源代码编辑窗口中对应的位置标出来。

先放个最终效果:

技术分享图片

在这个文件的第32行,import 了一个不存在的模块,这样的错误在 ESLint 中当然是检查不出来的,然而在 webpack 的实时构建中会报错:

技术分享图片

这个事情的困难在于两点:

  1. 如何通过 problemMatcher 把这个错误给抓出来?

  2. 如何找到错误对应的行号?(如果可能的话,还有列号)

webpack的错误输出格式并不是完全统一的,而且有些还没有行号 -- 一方面可能是 webpack 的 bug ,另一方面 vue 文件在构建的时候会拆成 template, script 和 style 三个方面进行构建,报错的行号可能对不上。

最终我的解决方案是对 webpack 的错误重新格式化输出,然后匹配:

首先,重新格式化输出需要 format-webpack-stats-errors-warnings 这个包(偶新写的)

npm install --save-dev format-webpack-stats-errors-warnings

然后,到 build/bin/build.js 和 build/bin/watch.js 中在 webpack 构建完成的回调函数中增加这个格式化后的输出:

技术分享图片

更多使用介绍见 github

最后,在 .vscode/tasks.json 中,每个任务下添加 problemWatcher:

// ...
{
    "taskName": "build",
    // ...
    // build 任务的:
    "problemMatcher": {
        "owner": "webpack",
        "fileLocation": [
            "relative",
            "${workspaceRoot}"
        ],
        "pattern": {
            "regexp": "^!>(\w+): (\S+)?:(\d+),(\d+)(?:~(?:(\d+),)?(\d+))?: (.*)$",
            "severity": 1,
            "file": 2,
            "line": 3,
            "column": 4,
            "endLine": 5,
            "endColumn": 6,
            "message": 7
        }
    }
}

{
    "taskName": "watch",
    // ...
    // watch 任务的:
    "problemMatcher": {
        "owner": "webpack",
        "fileLocation": [
            "relative",
            "${workspaceRoot}"
        ],
        "pattern": {
            "regexp": "^!>(\w+): (\S+)?:(\d+),(\d+)(?:~(?:(\d+),)?(\d+))?: (.*)$",
            "severity": 1,
            "file": 2,
            "line": 3,
            "column": 4,
            "endLine": 5,
            "endColumn": 6,
            "message": 7
        },
        "watching": {
            "activeOnStart": true,
            "beginsPattern": "^\s*Webpack begin run",
            "endsPattern": "^\s*Build complete at"
        }
    }
    // ...
}
// ...

注:在 watch 任务中,为了匹配何时开始和何时结束,我在 webpack 构建的 run 和 watch 时增加了一个 console.log(‘Webpack begin run‘) 的打印,而在构建完成后增加了一个 console.log("Build complete at ..") 的打印。

OK,终于基本搞定了 vscode ,可以愉快地开发 vue 应用了。

 

 

文章来源:https://segmentfault.com/a/1190000008749631

如何优雅地使用vscode来编辑vue文件

参考技术A不可能,目前暂无一个软件能取代LaTeX排版之王的地位。当然,LaTeX的模式并不是每个人都喜闻乐见的。在加之微软统治下的用户恶习,使得大家更倾向于Word的使用。又,题主将Word与LaTeX类比,显然和论文排版有关。 查看详情

软件优雅地使用vscode代替keil

目的:优雅地敲代码keil的界面看着不是很舒服,就使用VSCODE来编辑代码,舒服多了。用到的插件:Chinese(Simplified)LanguagePackforVisualStudioCodeKeilAssistantC/C++效果目前的可以正常编译,调试还没整明白(又... 查看详情

软件优雅地使用vscode代替keil

目的:优雅地敲代码keil的界面看着不是很舒服,就使用VSCODE来编辑代码,舒服多了。用到的插件:Chinese(Simplified)LanguagePackforVisualStudioCodeKeilAssistantC/C++效果目前的可以正常编译,调试还没整明白(又... 查看详情

教程如何优雅地使用vscode代替keil开发51单片机/stc单片机

多图预警我是目录0目的:优雅地敲代码1安装VSCODE1.1打开[vscode官网](https://code.visualstudio.com/)1.2点击下载1.3安装1.3.1双击下载好的文件1.3.2选择【我同意此协议】,单击【下一步】1.3.3其他的复选框全部勾选【细节】1.3.4单击... 查看详情

教程如何优雅地使用vscode代替keil开发51单片机/stc单片机

...【bin】文件夹路径复制到新建的变量中4安装vscode插件4.0如何安装插件4.0.1打开vscode4.0.2点击侧边的扩展按钮4.0.3输入扩展名称关键字,点击安装即可4.1汉化插件4.2C语言支持4.3keil工程支持4.3.1在详情页点击小齿 查看详情

vue3中如何优雅地在setup使用globalproperties(代码片段)

一、前言vue3已经发布到v3.2.x版了,在项目中也使用上了vue3,总体感觉还是不错的。vue3中使用Proxy来实现响应式数据,解决了vue2中的部分性能损耗、无法监听动态添加的属性的值变化、无法监听数组元素对象的属性的值的变化问... 查看详情

如何优雅地使用sublimetext

...感无比的编辑器是Coding和Writing最佳的选择,没有之一。如何优雅地使用 查看详情

如何优雅地重启芹菜工人?

】如何优雅地重启芹菜工人?【英文标题】:HowdoIrestartceleryworkersgracefully?【发布时间】:2012-04-0315:04:24【问题描述】:在发布新版本以更新工作人员中的代码时,如何优雅地重新启动celery工作人员?编辑:我打算做的是这样的... 查看详情

如何优雅地使用code:blocks

参考技术A1、打开Codeblocks软件。2、点击新建按钮,选择File...。3、选择C/C++source,点击Go。4、点击Next。5、根据需求选择C或C++,此处以C为例。6、点击路径选择按钮并设置文件名,确认后点击Finish按钮。7、接下来进入程序编辑界... 查看详情

如何优雅地使用sublimetext

如何优雅地使用SublimeTextBy 晚晴幽草轩轩主发表于2015-12-15SublimeText:一款具有代码高亮、语法提示、自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插件扩展机制,用她来写代码,绝对是一种享受。相比于... 查看详情

如何优雅地使用命令行设置windows文件关联(代码片段)

如何优雅地使用命令行设置windows文件关联使用ftype查看帮助设置关联所需命令有ftypeassoc,需要管理员权限。如果忘记使用方法可通过ftype的帮助获取查看方法C:WINDOWSsystem32>ftype/?显示或修改用在文件扩展名关联中的文件类型FTYPE... 查看详情

如何使用 VSCode 远程编辑网站文件?

】如何使用VSCode远程编辑网站文件?【英文标题】:HowtouseVSCodetoremotelyeditwebsitefiles?【发布时间】:2018-05-1120:52:32【问题描述】:我需要能够为我的客户远程登录Web服务器并远程编辑代码。我主要将其用于CSS更改,但也开始使用P... 查看详情

如何在vue中优雅地使用v-if判断(代码片段)

情况一:做vue项目,有的时候会遇到有几个元素都使用同一个v-if条件。下面这种方法虽然可以实现,但是整体代码看起来有点笨拙,我们可以用<template>标签进行优化一下。<template><divclass="card"... 查看详情

如何优雅地使用sublimetext

参考技术A充分理解和使用SublimeText的功能即可编辑多字段选择修改SublimeText支持多处文本的同时修改:选中需要修改的文字,编辑器会自动提示文档内的相同文本。按Cmd+d添加下一个文本段到标记列表,如果需要跳过当前文本段... 查看详情

如何优雅地使用windowstotalcommander

...。第一点:你能快速跳转到需要访问的文件夹吗?你知道如何用“分色”功能让特定文件醒目吗?你知道工具栏如何自定义吗?你遇到批量重命名的问题能不能通过TC解决?你了解TC大部分功能吗?你对于比较常用的几个插件有... 查看详情

如何通过javacsv类库来优雅地(偷懒)读写csv文件?

欢迎关注笔者的公众号:小哈学Java,专注于推送Java领域优质干货文章!!个人博客:https://www.exception.site/essay/how-to-create-read-csv-by-javacsv一、背景小哈公司最近准备开发一套新的平台,具体什么平台,因为涉密,这里就不透露了。平... 查看详情

如何优雅地使用disruptor

...用场合了。先从了解Disruptor的核心概念开始,来了解它是如何运作的。下面介绍的概念模型,既是领域对象,也是映射到代码实现上的核心对象。…… 查看详情

如何优雅地使用sublimetext3(转)

转自http://www.jianshu.com/p/3cb5c6f2421c/SublimeText:一款具有代码高亮、语法提示、自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插件扩展机制,用她来写代码,绝对是一种享受。相比于难于上手的Vim,浮肿沉重的Ec... 查看详情