Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

wext-manifest-loader

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

wext-manifest-loader

Webpack loader that lets you specify `manifest.json` properties to appear only in specific browsers.

  • 2.0.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
2.8K
increased by143.62%
Maintainers
1
Weekly downloads
 
Created
Source

wext-manifest-loader npm version

Webpack Loader for Webextension manifest

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

🙋‍♂️ Made by @abhijithvijayan

Donate: PayPal, Patreon

Buy Me a Coffee


Browser Support

ChromeFirefoxOperaEdge

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

# 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 enviroment

{
  "__dev__name": "NameInDevelopment",
  "__prod__name": "NameInProduction",
}

if the NODE_ENV is production this compiles to:

{
  "name": "NameInProduction",
}

else

{
  "name": "NameInDevelopment",
}

Credits

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

Show your support

Give a ⭐️ if this project helped you!

License

MIT © Abhijith Vijayan

Keywords

FAQs

Package last updated on 20 May 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc