从零开始写一个vuepress插件

初始化插件项目

  1. 在任意目录新建一个插件目录,我这里在 /pkg/vuepress-plugin-simple-encrypt

    mkdir /pkg/vuepress-plugin-simple-encrypt
    
    image-20220424215029271
    image-20220424215029271
  2. 进入该目录,初始化项目

    yarn init
    

    输入插件名 vuepress-plugin-simple-encrypt ,入口文件名 index.js ,其他选项对应填写即可。

    image-20220424215319909
    image-20220424215319909

    初始化之后,package.json 的文件内容:

    {
      "name": "vuepress-plugin-simple-encrypt",
      "version": "1.0.0",
      "description": "a simple encrypt and decrypt for vuepress",
      "main": "index.js",
      "scripts": {
        "test": "yarn test"
      },
      "repository": {
        "type": "git",
        "url": "git+https://github.com/terwer/vuepress-plugin-simple-encrypt.git"
      },
      "keywords": [
        "encrypt",
        "decrypt",
        "vuepress"
      ],
      "author": "terwer",
      "license": "MIT",
      "bugs": {
        "url": "https://github.com/terwer/vuepress-plugin-simple-encrypt/issues"
      },
      "homepage": "https://github.com/terwer/vuepress-plugin-simple-encrypt#readme"
    }
    
  3. 编写入口文件 index.js

    module.exports = (options, ctx) => {
        return {
            name: 'vuepress-plugin-simple-encrypt',
            async ready() {
                console.log('Hello World!');
            }
        }
    }
    
  4. 注入插件到 vuepress。在 config.ts 文件的插件节点加上我们的插件,注意使用相对目录目录

    [
      require('../../pkg/vuepress-plugin-simple-encrypt'), // 主要用于文章部分加密
      {
      }
    ]
    
  5. 启动项目 yarn dev ,正常情况可以看到输出 Hello World


Terwer...大约 2 分钟前端开发插件目录初始化从零开始vuepressplugin
Chrome插件开发background_js支持跨域请求与返回async和await的处理

background.js的配置

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
    switch (request.type) {
        case 'fetchChromeXmlrpc':
            (async () => {
                const response = await fetch(request.apiUrl, request.fetchCORSParams);
                const resText = await response.text()
                // console.log("chrome.runtime.onMessage.addListener fetchChromeXmlrpc response:", resText)
                sendResponse(resText);
            })();
            break;
        case 'fetchChromeJson':
            (async () => {
                const response = await fetch(request.apiUrl, request.fetchCORSOptions);
                const resJson = await response.json()
                console.log("chrome.runtime.onMessage.addListener fetchChromeJson response:", resJson)
                sendResponse(resJson);
            })();
            break;
        // 你可以定义任意内容,使用sendResponse()来返回它
        case 'test':
            sendResponse({'msg': 'test'});
            break;
    }

    return true; // keep the messaging channel open for sendResponse
});

Terwer...大约 2 分钟前端开发请求自定义chromeextension插件async
plantuml配合graphviz

IDEA 安装插件

直接 IDEA 搜索 plantuml 即可

Mac 安装

 brew install graphviz

Terwer...小于 1 分钟经验分享安装插件直接搜索graphviz