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

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;
    },
  };
}

神策

相关推荐
veneno34 分钟前
大量异步并发请求控制并发解决方案
前端
i***t9191 小时前
Spring Boot项目接收前端参数的11种方式
前端·spring boot·后端
oden1 小时前
2025博客框架选择指南:Hugo、Astro、Hexo该选哪个?
前端·html
小光学长1 小时前
基于ssm的宠物交易系统的设计与实现850mb48h(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·前端·数据库
云中飞鸿1 小时前
函数:委托
javascript
小小前端要继续努力2 小时前
渐进增强、优雅降级及现代Web开发技术详解
前端
老前端的功夫2 小时前
前端技术选型的理性之道:构建可量化的ROI评估模型
前端·javascript·人工智能·ubuntu·前端框架
狮子座的男孩3 小时前
js函数高级:04、详解执行上下文与执行上下文栈(变量提升与函数提升、执行上下文、执行上下文栈)及相关面试题
前端·javascript·经验分享·变量提升与函数提升·执行上下文·执行上下文栈·相关面试题
爱学习的程序媛3 小时前
《JavaScript权威指南》核心知识点梳理
开发语言·前端·javascript·ecmascript
乐观主义现代人3 小时前
go 面试
java·前端·javascript