首页 > 其他分享 >如何从零编写一个vite插件 创建 vite 插件通用模板

如何从零编写一个vite插件 创建 vite 插件通用模板

时间:2024-08-19 19:27:07浏览次数:5  
标签:插件 vue vite pnpm build true 模板 eslint

  1. 初始化

mkdir vite-progress && cd vite-progress && pnpm init
1.2 安装 typescript

pnpm i typescript @types/node -D
1.3 配置 tsconfig.json

{
"compilerOptions": {
"module": "ESNext",
"target": "esnext",
"moduleResolution": "node",
"strict": true,
"declaration": true,
"noUnusedLocals": true,
"esModuleInterop": true,
"outDir": "dist",
"lib": ["ESNext"],
"sourceMap": false,
"noEmitOnError": true,
"noImplicitAny": false
},
"include": [
"src/",
"
.d.ts"
],
"exclude": [
"node_modules",
"examples",
"dist"
]
}
1.4 安装 vite

pnpm intsall vite --save-dev

  1. 配置 eslint 和 prettier(可选)
    安装 eslint

pnpm i eslint @typescript-eslint / parser @typescript-eslint / eslint - plugin--save - dev
配置.eslintrc:

{
"root": true,
"env": {
"browser": true,
"es2021": true,
"es6": true,
"node": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 12,
"sourceType": "module"
},
"plugins": ["@typescript-eslint"],
"rules": {
"no-console": 1,
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-explicit-any": "off"
}
}
配置格式化文件
安装 prettier (可选)

pnpm i prettier eslint - config - prettier eslint - plugin - prettier--save - dev
配置.prettierrc :

{
"printWidth": 80,
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": true,
"quoteProps": "as-needed",
"trailingComma": "all",
"bracketSpacing": true,
"arrowParens": "always",
"requirePragma": false,
"insertPragma": false,
"proseWrap": "preserve",
"endOfLine": "auto"
}
3. 新增 src / index.ts 入口

import type { PluginOption } from 'vite';

export default function vitePluginTemplate (): PluginOption {
return {
// 插件名称
name: 'vite-plugin',
// pre 会较于 post 先执行
enforce: 'pre', // post
// 指明它们仅在 'build' 或 'serve' 模式时调用
apply: 'build', // apply 亦可以是一个函数
config (config, { command }) {
console.log('这里是config钩子');
},

    configResolved (resolvedConfig) {
        console.log('这里是configResolved钩子');
    },

    configureServer (server) {
        console.log('这里是configureServer钩子');
    },

    transformIndexHtml (html) {
        console.log('这里是transformIndexHtml钩子');
    },
}

}
到这里,那么我们的基本模版就建好了,怎么运行呢?

在当前目录下执行

pnpm create vite my-vue-app --template vue

cd my-vue-app

pnpm i

修改 my-vue-app/package.json

{
"name": "my-vue-app",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"vue": "^3.2.37"
},
"devDependencies": {
"@vitejs/plugin-vue": "^3.1.0",
"vite": "link:../node_modules/vite"
}
}

主要是加入 "devDependencies": { "vite": "link:../node_modules/vite" }

这里是让 里面和外面的 vite一个版本

然后修改 my-vue-app/vite.config.ts 文件

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

import acnBuildPlugin from '../dist/index.mjs'

export default defineConfig({
plugins: [vue(), acnBuildPlugin()]
})

好了,在外面(vite-progress 目录下)我们再下载个tsup ,tsup 是一个轻小且无需配置的,由 esbuild 支持的构建工具;

修改一下 vite-progress/package.json 的打包命令,及路径

"main": "./dist/index.mjs", "scripts": { "test": "echo "Error: no test specified" && exit 1", "dev": "pnpm run build -- --watch --ignore-watch my-vue-app", "build": "tsup src/index.ts --dts --format cjs,esm", "build:vite": "pnpm run build && cd my-vue-app && pnpm run build", "prepublish": "pnpm run build", "release": "npx bumpp --push --tag --commit && pnpm publish" },

开发环境运行
开发环境运行:实时监听文件修改后重新打包(热更新) pnpm run build:vite

到这里你就可以 边开发边运行了

标签:插件,vue,vite,pnpm,build,true,模板,eslint
From: https://www.cnblogs.com/shiwanboke/p/18367941

相关文章

  • 【OpenCV_python】凸包检测 轮廓特征 直方图均衡化 模板匹配 霍夫变换
    凸包特征检测凸包就是图像的最小外接多边形,通过图像的轮廓点,找到距离最远的两个点的直线,根据直线找到距离最远的下一个点,直到所有的点被包围在多边形内读取图像二值化找图像的轮廓获取凸包点的坐标绘制凸包点convexHull获得图像的凸包点cv2.convexHull(points,hu......
  • HTML5服装电商网上商城模板源码
    文章目录1.设计来源1.1主界面1.2购物车界面1.3电子产品界面1.4商品详情界面1.5联系我们界面1.6各种标签演示界面2.效果和源码2.1动态效果2.2源代码源码下载万套模板,程序开发,在线开发,在线沟通         【博主推荐】:前些天发现了一个巨牛的人工智能......
  • Python一些简单基础的模板化语法
    字符串的格式化%s:可以接收任何类型的传值(%d只可以接收整型int)单个值"myageis%s"%"18.56"按照值对应res="mynameis%s,myageis%s"%("xj",18)按照字典传值res="mynameis%(name)s,mynameis%(age)s"%{"age":"......
  • 一款专为IntelliJ IDEA用户设计的插件,极大简化Spring项目中的API调试过程,功能强大(附源
    前言在软件开发过程中,尤其是SpringMVC(Boot)项目中,API调试调用是一项常见但繁琐的任务。现有的开发工具虽然提供了一些支持,但往往存在效率不高、操作复杂等问题。为了处理这些痛点,提升开发效率,一款新的工具应运而生。介绍CoolRequest是一款专为IntelliJIDEA用户设计的插......
  • 易优CMS插件html.php页面缓存配置
    插件html.php页面缓存配置作用于插件前台,指定需要缓存的页面,这只在运营模式下才有效。参数规则:mca:weapp_控制器_操作名filename:生成在/data/runtime目录下的指定路径,建议参考以下p:当前url控制器的操作方法传入的全部参数变量名cache:页面缓存有效时间,单位是秒案例:假设......
  • 易优CMS插件config.php配置文件
    插件config.php配置文件配置如下:returnarray('code'=>'Demo',//插件标识'name'=>'示例',//插件名称'version'=>'v1.0.0',//当前插件版本'min_version'=>'v1.1.6',//最低系统版本支持......
  • Coze插件发布!PDF转Markdown功能便捷集成,打造你的专属智能体
    近日,TextIn开发的PDF转Markdown插件正式上架Coze平台。在扣子搜索“pdf转markdown”,或在Coze平台搜索“pdf2markdown”,即可找到插件,在你的专属智能体中便捷使用文档解析功能。如果想测试解析插件在你需要的场景下表现如何,可以直接对话bot,试用pdf转markdown效果。同时,TextIn......
  • 【生日视频制作】充气热气球飞艇AE模板修改文字软件生成器教程特效素材【AE模板】
    热气球飞艇生日视频制作教程AE模板修改文字特效广软件告生成器【生日视频制作】充气热气球飞艇AE模板修改文字软件生成器教程特效素材【AE模板】生日视频制作步骤:安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频......
  • 【生日视频制作】保时捷718美女汽车车身AE模板修改文字软件生成器教程特效素材
    保时捷718美女汽车身生日视频制作教程AE模板修改文字生成器【生日视频制作】保时捷718美女汽车车身AE模板修改文字软件生成器教程特效素材生日视频制作步骤:安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频......
  • 快读模板(QAQ)
    #include<bits/stdc++.h>usingnamespacestd;#defineint__int128#defineendl'\n'#defineiosios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);constintN=2e5+5;constintC=2e3+5;constintinf=0x3f3f3f3f3f3f3f3f;int......