vue3+webpack开发chrome插件(MV3版本)

简介

        chrome插件,chrome扩展是自定义的小型软件程序。它允许用户以多种方式定制Chrome的功能和行为,提供如下功能:1. 提高生产力的工具;2. 丰富网页内容;3. 信息汇总;4. 娱乐(如游戏)

        之前公司开发过一个基于MV2版本+vue2的chrome插件,并且已经投入市场进行使用了,但chrome官方已经宣布将在2023年不再更新MV2版本的chrome extension,虽然不影响使用,但MV2版本的chrome插件不仅没有办法上架chrome插件的商城,并且还会在拓展程序页面进行报错。基于以上的问题,公司决定开发MV3版本的chrome extension,而这个任务自然落到了我的身上。

        这篇博客是使用vue3+webpack开发chrome插件(MV3版本)时的一个流程,主要是利用webpack把vue3项目打包成chrome extension需要的文件格式供浏览器解析。

在这里插入图片描述

让我们开始吧

创建vue3项目

我的环境: node(v16.20.0);@vue/cli(v5.0.8)

项目文件夹/cmd

vue create <项目>

创建后出现以下界面,选择vue3即可

image.png

创建成功之后

cd <项目>
npm i
npm run serve

将生成的url在浏览器中打开出现以下界面之后,vue3项目就创建完成了
在这里插入图片描述

vue3参考文档

chrome插件项目配置

修改后的目录文件如下

image.png

文件内容

background/index.js

console.log('background.js')

content/index.js

console.log('content.js')

popup/App.vue

<template>
  <div class="popup">chrome extensionv3开发 popup页面</div>
</template>

<script setup></script>

<style>
.popup {
  color: red;
}
</style>

popup/index.js

import { createApp } from 'vue'
import App from './App.vue'

createApp(App).mount('#app')

popup/index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title>vue-chrome-extension</title>
  </head>
  <body>
    <noscript>
    </noscript>
    <div id="app"></div>
  </body>
</html>

manifest.json chrome插件的具体配置,可以按照自己的需要进行修改

chrome extension V3 国内参考文档

{
    "manifest_version": 3,
    "name": "chromeMV3",
    "description": "chromeMV3",
    "version": "1.0.0",
    "icons": {
        "48": "assets/logo.png",  
        "128": "assets/logo.png"
      },
    "action": {
        "default_icon": {
            "19": "assets/logo.png",
            "38": "assets/logo.png"
        },
        "default_popup": "popup.html",
        "default_title": "my-chrome-vue"
    },
    "background": {
        "service_worker": "js/background.js"
      },
    "content_scripts": [
        {
            "matches": [
                "http://*/*",
                "https://*/*"
            ],
            "js": [
                "js/content.js"
            ],
            "run_at": "document_end"
        }
    ],
    "host_permissions": ["http://*/*", "https://*/*"],
    "permissions": [
        "contextMenus",
        "tabs",
        "notifications",
        "storage"
    ],
    "content_security_policy": {
        "extension_pages": "script-src 'self'; object-src 'self'"
    },
    "web_accessible_resources": [
        {
            "resources":["js/content.js"],
            "matches":[
                "http://*/*",
                "https://*/*"
            ]
        }
    ]
}

vue.config.js
这是webpack打包方式的配置,在配置之前需要先安装一个插件用来复制文件

npm i copy-webpack-plugin

const CopyWebpackPlugin = require("copy-webpack-plugin");
const path = require("path");

// 只需要复制的文件
const copyFiles = [
  {
    from: path.resolve(`src/manifest.json`),
    to: `${path.resolve("dist")}/manifest.json`,
  },
  {
    from: path.resolve("src/assets"),
    to: path.resolve("dist/assets"),
  },
];

const plugins = [
  new CopyWebpackPlugin({
    patterns: copyFiles,
  }),
];

// 配置页面
const pages = {};
/**
 * popup 和 devtool 都需要html文件
 * 因此 chromeName 还可以添加devtool
 */
const chromeName = ["popup"];

chromeName.forEach((name) => {
  pages[name] = {
    entry: `src/${name}/index.js`,
    template: `src/${name}/index.html`,
    filename: `${name}.html`,
  };
});

module.exports = {
  pages,
  // 生产环境是否生成 sourceMap 文件
  productionSourceMap: false,
  configureWebpack: {
    // 多入口打包
    entry: {
      content: "./src/content/index.js",
      background: "./src/background/index.js",
    },
    output: {
      filename: "js/[name].js",
    },
    plugins,
    optimization: {
      splitChunks: false,
    },
  },
  css: {
    extract: {
      filename: "css/[name].css",
    },
  },
};

查看效果

打包

npm run build
打包成功后的文件如下

image.png

将dist文件导入拓展程序页面,成功之后如下

image.png

点击Service Worker,看到控制台打印出如下,代表background.js成功运行了

image.png

随便打开一个网页,以百度为例,打开控制台,打印出如下,代表content.js成功运行了

image.png

最后是点击拓展按钮

image.png

再点击我们的插件,弹出红色的文字,代表popup.js成功运行,并且CSS也成功注入了

image.png

结语

        因为正在开发相关的项目,所以我也翻阅了很多文档,还有CSDN、掘金上一些大神的文章,并按照需求也进行了修改,目前开发的进度已经是将基本框架以及通信方式差不多做好了,我会把一些自己踩过的坑,和实现需求时遇到的一些问题,分享给大家,如果也有正在开发chrome extension的小伙伴们,也可以在文章下一起讨论遇到的问题。

        如果有需要的,也可以直接拉下来使用,代码地址如下:github

在这里插入图片描述

  • 55
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Vue.js 3是一个流行的JavaScript框架,在浏览器开发中有一些很有用的工具可以帮助开发者更方便地使用Vue.js 3。 1. Vue Devtools: Vue Devtools 是一个浏览器插件,用于调试Vue应用程序。它提供了一个图形界面,可以查看Vue组件层次结构,并监视组件的状态、Props、计算属性等。它还提供了一个实时编辑器,可以在运行时修改组件的数据和属性,并查看更改的结果。Vue Devtools对于调试和优化Vue应用程序非常有帮助。 2. Chrome 开发者工具:Vue Devtools 是基于Chrome 开发者工具的,所以Chrome 开发者工具也是可以用来调试Vue应用程序的。在Chrome 开发者工具中,可以查看Vue组件层次结构、监视组件的状态和属性,还可以通过JavaScript控制台来交互和修改组件的数据和属性。这些功能都可以帮助开发者更好地调试和优化Vue应用程序。 3. Vue CLI:Vue CLI 是一个命令行界面工具,用于创建和管理Vue应用程序。它提供了一组命令,可以快速创建Vue项目,并集成了许多常用的工具和插件,如Webpack、Babel等。Vue CLI 还提供了内置的调试工具,可以帮助开发者在浏览器中实时查看和编辑Vue应用程序,并进行热重载。Vue CLI 简化了Vue应用程序的开发过程,并提供了一整套工具链,让开发者可以更高效地开发、测试和部署Vue应用程序。 总之,Vue.js 3浏览器工具为开发者提供了调试、优化和管理Vue应用程序的各种功能和工具,帮助开发者更方便地使用Vue.js 3进行浏览器开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-soda-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值