埋点,自己写插件,自己写的按钮埋点,掘金同款投递简历

20分钟掌握 Vite 插件开发 - 掘金 vite的生命周期啥的

1.浏览器的控制台输出有样式的字

复制代码
// const randomLetterPlugin = ()=>{
//     const letters = ['wwwwwww','000000000000','888888888888'];
//     //随机获取一个字符并打印
//     const printRandomLetter = ()=>{
//         const randomIndex = Math.floor(Math.random() * letters.length);
//         const randomLetter = letters[randomIndex];
//         console.log(`Random Letter:${randomLetter}`);
//     };

//     return{
//         name:'random-letter-plugin',
//         configureServer(server){
//             //在服务器启动时立即执行
//             printRandomLetter();
//         }
//     }
// };

// export default randomLetterPlugin;

const randomLetterPlugin = ()=>{
    const letters = ['我猜你就会点开控制台','你找我有啥事吗','看到你看了,我猜你又出bug了'];
    //随机获取一个字符并打印
    const printRandomLetter = ()=>{
        const randomIndex = Math.floor(Math.random() * letters.length);
        const randomLetter = letters[randomIndex];
        console.log(`Random Letter:${randomLetter}`);
        return `Random Letter:${randomLetter}`
    };

    return{
        name:'random-letter-plugin',
        configureServer(server){
            //在服务器启动时立即执行
            printRandomLetter();
        },
        transform(code,id){
            console.log('--------------------------');
            console.log(id);
            if (id.endsWith('main.js')) {
                // 如果是 main.js,则在代码末尾添加一段逻辑
                return `${code}\nif (typeof window !== 'undefined'){
                    // 在这里添加你的逻辑
                    const letters = ['wwwwwww','000000000000','888888888888'];
                    const printRandomLetter = ()=>{
                        const randomIndex = Math.floor(Math.random() * letters.length);
                        const randomLetter = letters[randomIndex];
                        return randomLetter
                    };
                    console.log(
                       '%c' + printRandomLetter(),'color:#1e80ff;font-size:20px;background:#fff;border-radius:5px;padding:5px 10px;'
                        );
                }`;
            }
            //这里自己写的用不了,gpt生成的可以
            // if(id.endsWith('main.js')){
            //     console.log('==========================');
            //     return `${code}\nif ( typeof window !== 'undefined'){
            //         const letters = ['wwwwwww','000000000000','888888888888'];
            //         const printRandomLetter = ()=>{
            //             const randomIndex = Math.floor(Math.random() * letters.length);
            //             const randomLetter = letters[randomIndex];
            //             return randomLetter
            //         };
            //         console.log(printRandomLetter());
            //     }`
            // }
            return code;
        }
    }
};

export default randomLetterPlugin;




import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import randomLetterPlugin from './plugins/randomLetterPlugin.js'
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(), randomLetterPlugin()],
})

2.自己写的按钮埋点

页面中有很多原生的按钮和element plus的按钮

复制代码
const randomLetterPlugin = ()=>{
    return{
        name:'random-letter-plugin',
        transform(code,id){
            if (id.endsWith('main.js')) {
                // 如果是 main.js,则在代码末尾添加一段逻辑
                return `${code}
                if (typeof window !== 'undefined'){
                    const buttons = document.querySelectorAll('button');

                    // 遍历所有按钮,并为每个按钮添加点击事件
                    buttons.forEach((button,i) => {
                        button.addEventListener('click', () => {
                            // 输出按钮中的文字
                            console.log(button.textContent);
                        });
                    });
                }`;
            }
            return code;
        }
    }
};

export default randomLetterPlugin;

3.掘金同款投递简历

复制代码
const randomLetterPlugin = ()=>{
    return{
        name:'random-letter-plugin',
        transform(code,id){
            if (id.endsWith('main.js')) {
                // 如果是 main.js,则在代码末尾添加一段逻辑
                return `${code}

                if (typeof window !== 'undefined'){
                    console.log(
                        '%c欢迎投递方头有限责任公司: https://www.baidu.com/','color:#1e80ff;background:#fff;'
                         );
                }`;
            }
            return code;
        }
    }
};

export default randomLetterPlugin;

vite 有个transform钩子还是什么的生命周期你可以在里面参一脚
export default function requirePlugin() {
  return {
    name: "vite-plugin-vue-requireToUrlPlugin",
    transform(code:string, id:string) {
      const vueRE = /\.tsx$/;
      const require = /require/g;
      if (!vueRE.test(id) || !require.test(code)) return code;
      const requireRegex = /require\((.*?)\)/g;
      const finalCode = code.replace(requireRegex, "new URL($1,import.meta.url).href");
      return finalCode;
    },
  };
}

神策

相关推荐
ZC跨境爬虫8 小时前
跟着 MDN 学 HTML day_9:(信件语义标记)
前端·css·笔记·ui·html
前端老石人8 小时前
HTML 字符引用完全指南
开发语言·前端·html
matlab_xiaowang8 小时前
Redux 入门:JavaScript 可预测状态管理库
开发语言·javascript·其他·ecmascript
幼儿园技术家8 小时前
前端如何设计权限系统(RBAC / ABAC)?
前端
前端摸鱼匠10 小时前
Vue 3 的v-bind合并行为:讲解v-bind与普通属性合并的规则
前端·javascript·vue.js·前端框架·ecmascript
REDcker10 小时前
浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
开发语言·前端·javascript·vue·ecmascript·php·js
donecoding12 小时前
一个 sudo 引发的血案:npm 全局包权限错乱彻底修复
前端·node.js·前端工程化
风骏时光牛马12 小时前
Raku正则匹配与数据批量处理实操案例
前端
nbwenren12 小时前
2026实测:Gemini 3 镜像站视觉能力实践——拍照原型图,一键生成 HTML+CSS 代码
前端·css·html
Lee川12 小时前
Prisma 实战指南:像搭积木一样设计古诗词数据库
前端·数据库·后端