parcel-plugin-web-extension-2 v2.0.3
Parcel Plugin Web Extension 2
This parcel plugin enables you to use a WebExtension manifest.json as an entry point. For more information about manifest.json, please refer to the MDN docs.
Please note that this package is a fork from parcel-plugin-web-extension
Main difference:
The concept of manifest overrides was abandoned in favor of the concept of dynamic manifest (see below).
Installation
Install via npm:
npm install --save-dev parcel-plugin-web-extension-2or via yarn:
yarn add -D parcel-plugin-web-extension-2Usage
Quick Start
After installing this plugin, use manifest.json as your entry point, like so:
parcel src/manifest.jsonYour assets will now be resolved from the contents of your manifest file.
Assets resolved by this plugin:
- background.scripts
- background.page
- content_scripts
- browser_action.default_popup
- browser_action.default_icon
- page_action.default_popup
- page_action.default_icon
- icons
- web_accessible_resources
- chrome_url_overrides.bookmarks
- chrome_url_overrides.newtab
- chrome_url_overrides.history
Dynamic Manifest
It is possible to generate a manifest that depends of:
- the environment (development / production)
- the targeted browser
- the version
- etc...
Example
Given this manifest.json:
{
    "manifest_version": 2,
    "name": "Example",
    "version": {
        "$replaceByVariable": "npm_package_version"
    },
    "permissions": [
        "storage",
        {
            "$keepIf": "NODE_ENV is development",
            "$replaceByValue": "https://localhost/*"
        },
        {
            "$keepIf": "NODE_ENV is production",
            "$replaceByValue": "https://example.com/*"
        }
    ],
    "applications": {
        "$keepIf": "VENDOR is firefox",
        "gecko": {
            "id": "example@example.com"
        }
    }
}If you execute this command,
VENDOR=firefox parcel src/manifest.json...you will get this generated manifest:
{
    "manifest_version": 2,
    "name": "Example",
    "version": "1.0.0",
    "permissions": [
        "storage",
		"https://localhost/*"
    ],
    "applications": {
        "gecko": {
            "id": "example@example.com"
        }
    }
}What happend?
- The manifest versionkey was replaced by thenpm_package_versionenvironment variable. It corresponds to the version stored in yourpackage.json. Here it's1.0.0.
- The localhostpermission was kept but theexample.comone was droped because you are in a development environment. Useparcel buildto switch to production environment.
- The applicationsobject was kept because we set theVENDORenvironment variable tofirefox. Please note that unlessnpm_package_versionorNODE_ENVthat are automatically set by NPM, theVENDORenvironment variable is defined by you. You can use other variables that way if you want.
For more information please see Simple JSON Templater
Licence
Apache 2.0