All Projects → abhijithvijayan → wext-manifest-loader

abhijithvijayan / wext-manifest-loader

Licence: MIT license
Webextension Manifest Generator that you specify `manifest.json` properties to appear only in specific browsers and environment

Programming Languages

typescript
32286 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to wext-manifest-loader

Manifest
Origin of dotOS
Stars: ✭ 69 (+200%)
Mutual labels:  manifest
Pwafire
Progressive Web Apps API of APIs
Stars: ✭ 137 (+495.65%)
Mutual labels:  manifest
enterprise-policy-generator
The Enterprise Policy Engine allows administrators to configure Firefox via a configuration file. The Enterprise Policy Generator helps to create the configuration file.
Stars: ✭ 57 (+147.83%)
Mutual labels:  webextension
Gradle Util Plugins
Fix for windows gradle long classpath issue. Fixes JavaExec tasks that error out with message "CreateProcess error=206, The filename or extension is too long"
Stars: ✭ 87 (+278.26%)
Mutual labels:  manifest
Service Worker Detector
This extension detects if a website registers a Service Worker.
Stars: ✭ 124 (+439.13%)
Mutual labels:  manifest
Inline Manifest Webpack Plugin
inline your webpack manifest (runtime code) with a script tag to save http request
Stars: ✭ 157 (+582.61%)
Mutual labels:  manifest
Yinyue
🏖Version Of Progressive Web App ( Serverless )
Stars: ✭ 57 (+147.83%)
Mutual labels:  manifest
snoozz-tab-snoozing
A Web Extension to declutter windows by snoozing tabs for later
Stars: ✭ 105 (+356.52%)
Mutual labels:  webextension
Webapp Webpack Plugin
[DEPRECATED] use favicons-webpack-plugin instead
Stars: ✭ 127 (+452.17%)
Mutual labels:  manifest
Jfa Pwa Toolkit
⚡️ PWA Features to Any Website (very Fast & Easy)
Stars: ✭ 245 (+965.22%)
Mutual labels:  manifest
Vue Pwa Asset Generator
PWA asset generator perfect with VueJS framework (but useful for all PWA!)
Stars: ✭ 97 (+321.74%)
Mutual labels:  manifest
Gulp Rev
Static asset revisioning by appending content hash to filenames: `unicorn.css` → `unicorn-d41d8cd98f.css`
Stars: ✭ 1,540 (+6595.65%)
Mutual labels:  manifest
Learning Pwa
📱some samples and blogs about how to start with your first PWA
Stars: ✭ 162 (+604.35%)
Mutual labels:  manifest
Inline Chunk Manifest Html Webpack Plugin
Extension plugin for html-webpack-plugin to inline webpack's chunk manifest. Default inlines in head tag.
Stars: ✭ 83 (+260.87%)
Mutual labels:  manifest
slack-channels-grouping
Chrome extension. Grouping slack channels.
Stars: ✭ 69 (+200%)
Mutual labels:  webextension
Bagit Java
Java library to support the BagIt specification.
Stars: ✭ 65 (+182.61%)
Mutual labels:  manifest
Ember Web App
NOTICE: official repository moved to https://github.com/zonkyio/ember-web-app
Stars: ✭ 143 (+521.74%)
Mutual labels:  manifest
trello-super-powers
Repository of the Firefox add-on. (https://addons.mozilla.org/en-US/firefox/addon/trello-super-powers/)
Stars: ✭ 29 (+26.09%)
Mutual labels:  webextension
quickjira
🚤 📂 Quickly access the JIRA of your choice by typing the ticket id
Stars: ✭ 65 (+182.61%)
Mutual labels:  webextension
Docker Registry Ui
Docker Registry UI
Stars: ✭ 233 (+913.04%)
Mutual labels:  manifest

wext-manifest-loader

Webpack Loader for Webextension manifest

🙋‍♂️ Made by @abhijithvijayan

Donate: PayPal, Patreon

Buy Me a Coffee


Generate browser tailored manifest.json for Web Extensions that you specify properties to appear only in specific browsers.

❤️ it? ⭐️ it on GitHub or Tweet about it.

Table of Contents

Browser Support

Chrome Firefox Opera Edge

This loader will take a definition input for the manifest, and return you content for the specified browser.

Looking for Web Extension starter

Checkout web-extension-starter that uses this package

Installation

Ensure you have Node.js 10 or later installed. Then run the following:

# via npm
npm install --save-dev wext-manifest-loader wext-manifest-webpack-plugin

# or yarn
yarn add wext-manifest-loader wext-manifest-webpack-plugin --dev

Usage

You can easily use this module together with the wext-manifest-webpack-plugin to output the manifest.json as part of your build process without any additional js bundle and with auto rebundling on file change.

Note: Make sure you pass a TARGET_BROWSER env variable with one of chrome/firefox/edge/opera value

Sample manifest with vendor prefixed keys

https://github.com/abhijithvijayan/web-extension-starter/blob/react-typescript/source/manifest.json

webpack.config.js

// ... other plugins
const WextManifestWebpackPlugin = require("wext-manifest-webpack-plugin");

const targetBrowser = process.env.TARGET_BROWSER;
const destPath = path.join(__dirname, 'extension');

module.exports = {
    entry: {
        manifest: './src/manifest.json',
        // ...
    },

    output: {
        path: path.join(destPath, targetBrowser),
        filename: 'js/[name].bundle.js',
    },

    module: {
        rules: [
            {
                type: 'javascript/auto', // prevent webpack handling json with its own loaders,
                test: /manifest\.json$/,
                use: 'wext-manifest-loader',
                exclude: /node_modules/,
            },
        ]
    },

    plugins: [
        new WextManifestWebpackPlugin(),
        // ...
    ],
};

Options

usePackageJSONVersion

Type: Boolean Default: false

If true, updates manifest.json version field with package.json version. It is often useful for easy release of web-extension.

webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        type: 'javascript/auto', // prevent webpack handling json with its own loaders,
        test: /manifest\.json$/,
        use: {
            loader: 'wext-manifest-loader',
            options: {
                usePackageJSONVersion: true,
            },
        },
        exclude: /node_modules/,
      },
    ],
  },
};

FAQs

1.What are vendor prefixed manifest keys

Vendor prefixed manifest keys allow you to write one manifest.json for multiple vendors.

{
  "__chrome__name": "AwesomeChrome",
  "__firefox__name": "AwesomeFirefox",
  "__edge__name": "AwesomeEdge",
  "__opera__name": "AwesomeOpera"
}

if the TARGET_BROWSER is chrome this compiles to:

{
  "name": "AwesomeChrome",
}

Add keys to multiple vendors by seperating them with | in the prefix

{
  __chrome|opera__name: "AwesomeExtension"
}

if the vendor is chrome or opera, this compiles to:

{
  "name": "AwesomeExtension"
}

2. How can I conditionally set keys based on environment

{
  "__dev__name": "NameInDevelopment",
  "__prod__name": "NameInProduction",
  "__chrome|firefox|dev__description": "DescriptionInDevelopmentForSetOfBrowsers",
  "__chrome|firefox|prod__description": "DescriptionInProductionForSetOfBrowsers"
}

if the NODE_ENV is production and the TARGET_BROWSER is chrome this compiles to:

{
  "name": "NameInProduction",
  "description": "DescriptionInProductionForSetOfBrowsers"
}

else

{
  "name": "NameInDevelopment",
  "description": "DescriptionInDevelopmentForSetOfBrowsers"
}

Issues

Looking to contribute? Look for the Good First Issue label.

🐛 Bugs

Please file an issue here for bugs, missing documentation, or unexpected behavior.

See Bugs

Linting & TypeScript Config

Credits

Thanks to @fregante for suggesting to convert initial (wext-manifest) module to webpack loader(wext-manifest-loader)

License

MIT © Abhijith Vijayan

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].