国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解vue-cli3開發Chrome插件實踐

2019-11-19 11:26:31
字體:
來源:轉載
供稿:網友

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

tip:如果你沒接觸過谷歌插件開發的話建議先看看基礎文檔:

搭建環境

  • 創建一個vue-cli3項目: vue create vue-extension,對話流程選擇默認就行。
  • 進入項目cd vue-extension
  • 安裝vue-cli-plugin-chrome-ext插件:vue add chrome-ext,根據安裝對話選項設置好。
  • 刪除vue-cli3無用文件跟文件夾:src/main.js,public、src/components

運行項目

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

npm run build 運行生產環境編譯打包,將所有文件進行整合打包。

引入element UI

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

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

npm install element-ui

考慮到插件打包后的文件大小,最后通過按需加載的方式來引入組件,按照 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" } ] ]}

接下來修改 popup 相關文件引入所需組件, src/popup/index.js 內容:

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 內容:

<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" > {{'列表內容 ' + o }} </div> </el-card></template><script>export default { name: 'app',}</script><style>.box-card { width: 300px;}</style>

渲染效果:

當然,不僅僅是插件內部的頁面,還可以將 element-ui 組件插入到 content 頁面。

content.js 使用 element-ui 組件

content.js 主要作用于瀏覽網頁,對打開的網頁進行插入、修改 DOM ,對其進行操作交互。別覺得 element-ui 只能配合 vue 使用,其實就是一個前端框架,只要我們引入了就能使用, webpack 會自動幫我們抽離出來編譯打包。

首先我們創建 src/content/index 文件,內容:

import { Message, MessageBox} from 'element-ui';// 發現element的字體文件無法通過打包加載,所以另外通過cdn來加載樣式let element_css = document.createElement('link');element_css.element_css.rel = "stylesheet"document.head.append(element_css)MessageBox.alert('這是一段內容', '標題名稱', { confirmButtonText: '確定', callback: action => { Message({  type: 'info',  message: `action: ${ action }` }); }})

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

const CopyWebpackPlugin = require("copy-webpack-plugin");const path = require("path");// Generate pages objectconst 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, // // 生產環境是否生成 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/ 網址后可看到:

添加打包文件大小預覽配置

既然用了 vue-cli3 了,怎能不繼續折騰呢,我們平時用 webpack 開發肯定離不開打包組件預覽功能,才能分析哪些組件占用文件大,該有的功能一個都不能少:sunglasses:。這么實用的功能,實現起來也無非就是添加幾行代碼的事:

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

就辣么簡單,然后運行 npm run build --report 看看效果:

搞定收工!

結語

事實證明,vue-cli3很強大,vue相關的插件并不是不能應用于開發瀏覽器插件,element-ui也不僅限于vue的運用。只有你想不到,沒有做不到的事😁。

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 寿阳县| 上高县| 文安县| 刚察县| 浏阳市| 武鸣县| 青龙| 景谷| 比如县| 兖州市| 抚州市| 达日县| 巴林左旗| 阿克苏市| 磐安县| 长海县| 江安县| 阆中市| 兴安县| 舒兰市| 长治县| 上饶市| 灌南县| 曲水县| 汨罗市| 都安| 万年县| 重庆市| 龙游县| 寿宁县| 菏泽市| 广河县| 澳门| 宜宾县| 崇州市| 寻甸| 宁远县| 如东县| 黑水县| 乐安县| 庆云县|