Code Monkey home page Code Monkey logo

vue-cli-plugin-browser-extension's Introduction

vue-cli-plugin-browser-extension

Browser extension development plugin for vue-cli 3.x

What does it do?

This is intended to be a [email protected] replacement for https://github.com/Kocal/vue-web-extension.

This plugin changes the serve command for your vue applications. This new command is only for running a livereload server while testing out your browser extension.

This removes the entrypoint of main.js, and as such will not scaffold a general vue app. That behavior might change when support for a standalone tab application exists, but for now it is gone.

Packaging and deploying will still be done with yarn build and zipping in up for Chrome, Firefox, or whichever other browser you wish to develop for.

It makes some assumptions about your project setup. I hope to be able to scaffold an app so that identifying the below in unnecessary.

|- public/
  |- icons/
    |- Icons for your extension. Should include a 16, 19, 38, 48, 128 px square image
|- src/
   |- assets/
      |- Static assets in use in your app, like logo.png
   |- content_scripts
      |- content-script.js
   |- options/ (asked during project generation)
      |- App.vue
      |- options.html
      |- options.js
   |- popup/
      |- router/
         |- pages/
            |- Index.vue
         |- index.js
         |- routes.js
      |- App.vue
      |- popup.html
      |- popup.js
   |- override/
      |- router/
         |- pages/
            |- Index.vue
         |- index.js
         |- routes.js
      |- App.vue
      |- override.html
      |- override.js
   |- standalone/
      |- router/
         |- pages/
            |- Index.vue
         |- index.js
         |- routes.js
      |- App.vue
      |- standalone.html
      |- standalone.js
   |- store/
      |- actions.js
      |- getters.js
      |- index.js
      |- mutation-types.js
      |- mutations.js
   |- background.js
   |- manifest.json

Adding to your project

This can be added to your vuejs project by one of the following methods:

  • Using the vue ui and searching for this project
  • Using the vue cli vue add browser-extension command

Usage

Running the Livereload server. This will build and write to the local dist directory.

This plugin will respect the outputDir setting, however it cannot read into passed CLI args, so if you require a custom output dir, be sure to add it in your vue.config.js file. You can then add this as an unpacked plugin to your browser, and will continue to update as you make changes.

NOTE: you cannot get HMR support in the popup window, however, closing and reopening will refresh your content.

yarn serve
yarn build

Plugin options

Plugin options can be set inside your vue.config.js:

// vue.config.js
module.exports = {
  pluginOptions: {
    browserExtension: {
      // options...
    },
  },
};
  • components

    • Type: Object.<string, boolean>

    The browser extension components that will be managed by this plugin.

    Valid components are:

    • background
    • popup
    • options
    • contentScripts
    • override
    • standalone
    components: {
      background: true,
      contentScripts: true
    }
  • componentOptions

    • Type: Object.<string, Object>

    See Component options.

  • manifestSync

    • Type: Array<string>
    • Default: ['version']

    Array containing names of manifest.json keys that will be automatically synced with package.json on build.

    Currently, the only supported keys are version and description.

  • manifestTransformer

    • Type: Function

    Function to modify the manifest JSON outputted by this plugin.

    An example use case is adding or removing permissions depending on which browser is being targeted.

    manifestTransformer: (manifest) => {
      if (process.env.BROWSER === 'chrome') {
        manifest.permissions.push('pageCapture');
      }
      return manifest;
    };
  • modesToZip

    • Type: Array<string>
    • Default: ['production']

    Array containing names of mode in which zipping up will trigger after build.

  • api

    • Type: 'chrome'|'browser'
    • Default: 'browser'

    Browser extension API to use.

  • usePolyfill

    • Type: boolean
    • Default: true

    Whether to add webextension-polyfill to polyfill WebExtension APIs in chrome.

  • autoImportPolyfill

    • Type: boolean
    • Default: true

    Whether to auto import webextension-polyfill using Webpack's ProvidePlugin.

Component options

Some browser extension components have additional options which can be set as follows:

// vue.config.js
module.exports = {
  pluginOptions: {
    browserExtension: {
      componentOptions: {
        // <name of component>: <options>
        // e.g.
        contentScripts: {
          entries: {
            content1: 'src/content-script1.js',
            content2: 'src/content-script2.js',
          },
        },
      },
    },
  },
};

background

  • entry

    • Type: string|Array<string>

    Background script as webpack entry using the single entry shorthand syntax.

    background: {
      entry: 'src/my-background-script.js';
    }

contentScripts

  • entries

    • Type: {[entryChunkName: string]: string|Array<string>}

    Content scripts as webpack entries using using the object syntax.

    contentScripts: {
      entries: {
        'my-first-content-script': 'src/content-script.js',
        'my-second-content-script': 'src/my-second-script.js'
      }
    }

Internationalization

Some boilerplate for internationalization has been added. This follows the i18n (chrome|WebExtention) spec. Provided for you is the default_locale option in the manifest, and a _locales directory. There is some basic usage of it in the manifest, as well as in some of the boilerplate files. Since this is largely an out of the box solution provided by the browsers, it is heavily encouraged to utilize it. If you do not want to translate your app, simply delete the public/_locales directory, and no longer use the browser.i18n methods.

Testing

This library is following the standard styling of vue projects, and those are really the only tests to perform.

yarn test

Roadmap

  • Add some generator options for other pieces of browser extensions. This includes scaffolding the components/dirs, and registering the build options into the build time hooks.
    • Dev Tools
  • A preset
  • Key Generation
  • Cleanup the dist-zip directory

Credits

vue-cli-plugin-browser-extension's People

Contributors

adambullmer avatar siphomateke avatar kocal avatar naokazuterada avatar franciscolourenco avatar korziee avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.