欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解vue-cli3開發(fā)Chrome插件實(shí)踐

 更新時(shí)間:2019年05月29日 08:26:20   作者:Mr李子  
這篇文章主要介紹了vue-cli3開發(fā)Chrome插件實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

之前找了不少如何開發(fā)谷歌插件的文章,結(jié)果發(fā)現(xiàn)都是些很基礎(chǔ)的內(nèi)容,并沒有寫到如何快速編譯打包插件。我就在想為什么不能通過(guò)webpack來(lái)打包插件呢?如果通過(guò)webpack編譯的話,就能使開發(fā)過(guò)程變得更舒服,使文件結(jié)構(gòu)趨向模塊化,并且打包的時(shí)候直接編譯壓縮代碼。后來(lái)發(fā)現(xiàn)了 vue-cli-plugin-chrome-ext 插件,通過(guò)這個(gè)插件能很方便地用 vue-cli3 來(lái)開發(fā)谷歌插件,并能直接引用各種UI框架跟npm插件。

tip:如果你沒接觸過(guò)谷歌插件開發(fā)的話建議先看看基礎(chǔ)文檔:

搭建環(huán)境

  • 創(chuàng)建一個(gè)vue-cli3項(xiàng)目: vue create vue-extension,對(duì)話流程選擇默認(rèn)就行。
  • 進(jìn)入項(xiàng)目cd vue-extension
  • 安裝vue-cli-plugin-chrome-ext插件:vue add chrome-ext,根據(jù)安裝對(duì)話選項(xiàng)設(shè)置好。
  • 刪除vue-cli3無(wú)用文件跟文件夾:src/main.js,public、src/components

運(yùn)行項(xiàng)目

npm run build-watch 運(yùn)行開發(fā)環(huán)境,對(duì)修改文件進(jìn)行實(shí)時(shí)編譯并自動(dòng)在根目錄下生成 dist 文件夾,然后在瀏覽器上加載 dist 文件夾完成插件安裝。(注意:修改 background 文件跟 manifest.json 文件并不能實(shí)時(shí)刷新代碼,需要重新加載插件才行)

npm run build 運(yùn)行生產(chǎn)環(huán)境編譯打包,將所有文件進(jìn)行整合打包。

引入element UI

目前的插件加載到瀏覽器后彈出頁(yè)面是這種界面:

平時(shí)我們肯定要引入好看的UI框架的,在這里我們可以引入 element-ui,首先安裝:

npm install element-ui

考慮到插件打包后的文件大小,最后通過(guò)按需加載的方式來(lái)引入組件,按照 element-ui 官方的按需加載方法,要先安裝 babel-plugin-component 插件:

npm install babel-plugin-component -D

然后,將 babel.config.js 修改為:

module.exports = {
 presets: [
 '@vue/app'
 ],
 "plugins": [
 [
 "component",
 {
 "libraryName": "element-ui",
 "styleLibraryName": "theme-chalk"
 }
 ]
 ]
}

接下來(lái)修改 popup 相關(guān)文件引入所需組件, src/popup/index.js 內(nèi)容:

import Vue from "vue";
import AppComponent from "./App/App.vue";

Vue.component("app-component", AppComponent);

import {
 Card
} from 'element-ui';

Vue.use(Card);

new Vue({
 el: "#app",
 render: createElement => {
 return createElement(AppComponent);
 }
});

src/popup/App/App.vue 內(nèi)容:

<template>
 <el-card class="box-card">
 <div
 slot="header"
 class="clearfix"
 >
 <span>卡片名稱</span>
 <el-button
 style="float: right; padding: 3px 0"
 type="text"
 >操作按鈕</el-button>
 </div>
 <div
 v-for="o in 4"
 :key="o"
 class="text item"
 >
 {{'列表內(nèi)容 ' + o }}
 </div>
 </el-card>
</template>

<script>
export default {
 name: 'app',
}
</script>

<style>
.box-card {
 width: 300px;
}
</style>

渲染效果:

當(dāng)然,不僅僅是插件內(nèi)部的頁(yè)面,還可以將 element-ui 組件插入到 content 頁(yè)面。

content.js 使用 element-ui 組件

content.js 主要作用于瀏覽網(wǎng)頁(yè),對(duì)打開的網(wǎng)頁(yè)進(jìn)行插入、修改 DOM ,對(duì)其進(jìn)行操作交互。別覺得 element-ui 只能配合 vue 使用,其實(shí)就是一個(gè)前端框架,只要我們引入了就能使用, webpack 會(huì)自動(dòng)幫我們抽離出來(lái)編譯打包。

首先我們創(chuàng)建 src/content/index 文件,內(nèi)容:

import {
 Message,
 MessageBox
} from 'element-ui';

// 發(fā)現(xiàn)element的字體文件無(wú)法通過(guò)打包加載,所以另外通過(guò)cdn來(lái)加載樣式
let element_css = document.createElement('link');
element_css.
element_css.rel = "stylesheet"
document.head.append(element_css)

MessageBox.alert('這是一段內(nèi)容', '標(biāo)題名稱', {
 confirmButtonText: '確定',
 callback: action => {
 Message({
  type: 'info',
  message: `action: ${ action }`
 });
 }
})

vue.config.js 增加 content.js 文件的打包配置,因?yàn)?content.jsbackground.js 同樣可以只生成js文件)只有js文件,不用像app模式那樣打包生成相應(yīng)的 html 文件,完整內(nèi)容如下:

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

// Generate pages object
const pagesObj = {};

const chromeName = ["popup", "options"];

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

const plugins =
 process.env.NODE_ENV === "production" ? [{
 from: path.resolve("src/manifest.production.json"),
 to: `${path.resolve("dist")}/manifest.json`
 }] : [{
 from: path.resolve("src/manifest.development.json"),
 to: `${path.resolve("dist")}/manifest.json`
 }];

module.exports = {
 pages: pagesObj,
 // // 生產(chǎn)環(huán)境是否生成 sourceMap 文件
 productionSourceMap: false,

 configureWebpack: {
 entry: {
 'content': './src/content/index.js'
 },
 output: {
 filename: 'js/[name].js'
 },
 plugins: [CopyWebpackPlugin(plugins)]
 },
 css: {
 extract: {
 filename: 'css/[name].css'
 // chunkFilename: 'css/[name].css'
 }
 }
};

最后在 manifest.development.json 加載 content.js 文件:

{
 "manifest_version": 2,
 "name": "vue-extension",
 "description": "a chrome extension with vue-cli3",
 "version": "0.0.1",
 "options_page": "options.html",
 "browser_action": {
 "default_popup": "popup.html"
 },
 "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
 "content_scripts": [{
 "matches": [
  "*://*.baidu.com/*"
 ],
 "js": [
  "js/content.js"
 ],
 "run_at": "document_end"
 }]
}

然后瀏覽器重新加載插件后打開 https://www.baidu.com/ 網(wǎng)址后可看到:

添加打包文件大小預(yù)覽配置

既然用了 vue-cli3 了,怎能不繼續(xù)折騰呢,我們平時(shí)用 webpack 開發(fā)肯定離不開打包組件預(yù)覽功能,才能分析哪些組件占用文件大,該有的功能一個(gè)都不能少:sunglasses:。這么實(shí)用的功能,實(shí)現(xiàn)起來(lái)也無(wú)非就是添加幾行代碼的事:

// vue.config.js

module.export = {
 /* ... */

 chainWebpack: config => {
 // 查看打包組件大小情況
 if (process.env.npm_config_report) {
 // 在運(yùn)行命令中添加 --report參數(shù)運(yùn)行, 如:npm run build --report
 config
 .plugin('webpack-bundle-analyzer')
 .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
 }
 }
}

就辣么簡(jiǎn)單,然后運(yùn)行 npm run build --report 看看效果:

搞定收工!

結(jié)語(yǔ)

事實(shí)證明,vue-cli3很強(qiáng)大,vue相關(guān)的插件并不是不能應(yīng)用于開發(fā)瀏覽器插件,element-ui也不僅限于vue的運(yùn)用。只有你想不到,沒有做不到的事😁。

tip:如果你懶得從頭開始搭建模板的話也可以從GitHub拉取vue-extension-template

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用vue深度選擇器修改ElementUI組件內(nèi)樣式的示例代碼

    使用vue深度選擇器修改ElementUI組件內(nèi)樣式的示例代碼

    在帶有scoped屬性的style中書寫樣式時(shí),無(wú)法作用影響到子組件中的樣式,此時(shí)我們會(huì)使用到deep深度選擇器,來(lái)解決此問題,我們?cè)谑褂胠ess預(yù)處理器,能正常使用,但是在scss預(yù)處理器中會(huì)報(bào)錯(cuò),下面通過(guò)本文介紹vue深度選擇器修改ElementUI組件內(nèi)樣式,需要的朋友可以參考下
    2022-12-12
  • vue 列表頁(yè)跳轉(zhuǎn)詳情頁(yè)獲取id以及詳情頁(yè)通過(guò)id獲取數(shù)據(jù)

    vue 列表頁(yè)跳轉(zhuǎn)詳情頁(yè)獲取id以及詳情頁(yè)通過(guò)id獲取數(shù)據(jù)

    這篇文章主要介紹了vue 列表頁(yè)跳轉(zhuǎn)詳情頁(yè)獲取id以及詳情頁(yè)通過(guò)id獲取數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue項(xiàng)目使用js監(jiān)聽瀏覽器關(guān)閉、刷新、后退事件實(shí)現(xiàn)方法

    vue項(xiàng)目使用js監(jiān)聽瀏覽器關(guān)閉、刷新、后退事件實(shí)現(xiàn)方法

    用vue做的項(xiàng)目,有個(gè)需求就是關(guān)閉瀏覽器的時(shí)候,需要往后臺(tái)提交有個(gè)接口,來(lái)看看這個(gè)賬號(hào)有沒有下線,這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目使用js監(jiān)聽瀏覽器關(guān)閉、刷新、后退事件的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2024-06-06
  • Vue-CLI 3 scp2自動(dòng)部署項(xiàng)目至服務(wù)器的方法

    Vue-CLI 3 scp2自動(dòng)部署項(xiàng)目至服務(wù)器的方法

    這篇文章主要介紹了Vue-CLI 3 scp2自動(dòng)部署項(xiàng)目至服務(wù)器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 淺談vuex之mutation和action的基本使用

    淺談vuex之mutation和action的基本使用

    本篇文章主要介紹了淺談vuex之mutation和action的基本使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • vue全局組件與局部組件使用方法詳解

    vue全局組件與局部組件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了vue全局組件與局部組件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • vue安裝less-loader依賴失敗問題及解決方案

    vue安裝less-loader依賴失敗問題及解決方案

    這篇文章主要介紹了vue安裝less-loader依賴失敗問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue如何使用async、await實(shí)現(xiàn)同步請(qǐng)求

    vue如何使用async、await實(shí)現(xiàn)同步請(qǐng)求

    這篇文章主要介紹了vue如何使用async、await實(shí)現(xiàn)同步請(qǐng)求,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • vue單向數(shù)據(jù)流的深入理解

    vue單向數(shù)據(jù)流的深入理解

    隨著前端的項(xiàng)目的越來(lái)越復(fù)雜,出現(xiàn)了一堆概念來(lái)降低開發(fā)的復(fù)雜性,單向數(shù)據(jù)流就是其中一個(gè),下面這篇文章主要給大家介紹了關(guān)于vue單向數(shù)據(jù)流的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • vue下使用fullcalendar案例講解

    vue下使用fullcalendar案例講解

    這篇文章主要介紹了vue下使用fullcalendar及簡(jiǎn)單案例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01

最新評(píng)論