制作vscode代码片段插件 Code Snippets

1,521 阅读1分钟

前言

我们有一些通用的代码片段,例如模态框(modal)等

为了快速生成代码代码风格统一

可以开发个vscode代码片段(Snippets)插件供团队内使用

开发

安装依赖

yarn global add yo generator-code vsce

生成项目

yo code

image.png

插件类型,选 New Code Snippets

插件名称,name of your extension: test-snippet

代码片段支持的语言类型, Language id: javascript

image.png

项目目录

.
├── CHANGELOG.md
├── README.md
├── package.json
├── snippets  //代码片段文件夹
│   └── snippets.code-snippets // 相应的代码片段文件
└── vsc-extension-quickstart.md

定义代码片段

添加配置选项

在 package.jsoncontributessnippets添加

"contributes": {
    "snippets": [
      {
        "language": "javascript",
        "path": "./snippets/snippets.code-snippets"
      },
      {
        "language": "javascriptreact",
        "path": "./snippets/snippets.code-snippets"
      },
      {
        "language": "typescript",
        "path": "./snippets/snippets.code-snippets"
      },
      {
        "language": "typescriptreact",
        "path": "./snippets/snippets.code-snippets"
      }
    ]
},

让插件支持这四种语言

编写代码片段

代码片段的编写可查看这里

// jsComponent copy.code-snippets 文件
{
  "来自 test-snippet 的 modal 模板": {
    "prefix": "modal",
    "body": [
      "import { Modal } from '@/components';",
      "import React, { Component } from 'react';",
      "",
      "interface ${1:$TM_FILENAME_BASE}ModalProps {",
      "  visible: boolean;",
      "  setVisible: (visible: boolean) => void;",
      "}",
      "",
      "interface ${1:$TM_FILENAME_BASE}ModalState {}",
      "",
      "export default class ${1:$TM_FILENAME_BASE}Modal extends Component<${1:$TM_FILENAME_BASE}ModalProps, ${1:$TM_FILENAME_BASE}ModalState> {",
      "  submit() {",
      "    console.log('submit')",
      "  }",
      "",
      "  render() {",
      "    const { visible, setVisible } = this.props;",
      "",
      "    return (",
      "      <Modal",
      "        className=\"setting-modal\"",
      "        title=\"设置\"",
      "        visible={visible}",
      "        onClose={() => setVisible(false)}",
      "        onCancel={() => setVisible(false)}",
      "        onOk={() => this.submit()}",
      "      >",
      "        ${2:content}",
      "      </Modal>",
      "    );",
      "  }",
      "}",
      ""
    ]
  }
}

打包发布

package.json中填上发布者和仓库地址

"publisher": "tom",
"repository": {},

然后改一下README.md

这是我们团队内部的一个插件

执行打包

vsce package

打包完成后会生成.vsix后缀的安装包。如果插件仅为个人或者团队内部共享,那么手动安装即可使用,无需发布到 VSCode 插件市场。

如果想了解插件市场发布,可查看这里

image.png

现在modal模板可以使用了

image.png