Building Chrome Extensions with Vuejs and Vuecli
I'm currently building a Chrome Extension with a vuejs powered frontend. This worked pretty great using vuecli
. Up until the point at which the app started using the Webextension
-API. Normal websites do not have access to this API; registered Extensions do.
So what's a good setup for developing a vuejs
-Extension with the power of using vuecli
(which supports webpack tooling)? What setup allows to test the application?
I recommend using vue-cli-plugin-browser-extension
. Note that while the README indicates Vue CLI 3.x support, it also works with Vue CLI 4.x (tested with 4.3.1).
It supports several features that will save you a bunch of time, including live-reload, and bundling for Chrome and Firefox (and other browsers).
To install it in a Vue CLI project, just run: vue add browser-extension
.
After some contemplating, I came across the vue-cli-service
-binary. This binary allows to watch
a project and rebuild the app as required. By default, vuecli
will output files to dist
, which is the directory in which I placed manifest.json
, contentScript.js
and backgroundScript.js
files. The following command will then rebuild the app as needed, allowing for almost hot-reloading (opening and closing the popup). Build times are reasonably quick for a small app (~200ms).
vue-cli-service build --watch --no-clean
Lastly, you might have to disable eslint
on save (see this), as it throws errors about chrome
not being found. Then I load the unpacked extension into a clean Chrome session and start testing it using the developer tools. Unfortunately, I have not yet gotten Vue Devtools
working with the extension.
It works for me: I can develop vuejs
-powered Chrome extensions in a reasonabale way. I am still wondering if anybody has any better workflows or ideas for improvement?
EDIT: @tony19's answer is the preferred way.