npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@firstfleet/replacer-brunch

v2.0.2

Published

Fork of replacer-brunch by Ted Kesgar. Adds string replacement support to Brunch. This fork contains modifications laid our in the readme file.

Downloads

22

Readme

@firstfleet/replacer-brunch

Ruthlessly simple string replacement plugin to Brunch.

This is a fork of (replacer-brunch)[https://github.com/firstfleetinc/replacer-brunch]. There have been some modifications, they are as follows.

ESM Support ONLY version 2.0.0 and >

This how now been converted to an ES module. In order to use this with brunch, you have to modify brunch itself to use common js dynamic imports. Firstfleet uses a custom patch to allow ESM support in brunch.

Public url rewriting for .html files

This fork also supports key rewriting in .html files from the assets directory. This is so when you build your front-end application for production, you can overwrite the base url in the index.html file if your app does not live at the root of the domain. See the public url rewrite section below.

Global replace

By default, the replace method will now replace the defined key in the entire file, rather than just replacing the first instance. This was achieved by replacing the default replace definition of

    if (!this.config.replace) {
      this.config.replace = (str, key, value) => str.replace(key, value);
    }

With

    // Set default replace method
    if (!this.config.replace) {
      this.config.replace = (str, key, value) => {
        const reg = new RegExp(key, "g");

        return str.replace(reg, value);
      };
    }

Pattern Overrirde

You can now change the file patterns this plugin will process, and the default file pattern has been updated. The previous file pattern was

BrunchReplacer.prototype.pattern = /\.jsx?$/;

and has been updated to

BrunchReplacer.prototype.pattern = /\.(js|svelte|jsx)?$/;

You can also overwrite the pattern in the configuration.

replacer: {
        pattern: /\.jsx?$/, // Here you can specify the the pattern
        dict: [
            // Replace pubnub pub key in js files
            {
                key: "__PUBLICURL__",
            },
            {
                key: "__SUBROUTE__",
            },
        ],
    },

Configuration

replacer: {
  // dict is an array containing objects with key and value property.
  // String replacements are processed in order from first to last.
  dict: [
    {
      // key will be replaced by value.
      key: '__KEY__',
      value: '__VALUE__'
    },
    {
      // You can use anything as value.
      // Non-string values will be passed through JSON.stringify().
      key: '__PACKAGE__',
      value: require('./package.json')
    },
    {
      // By default replacer uses String.replace(), so only the first
      // occurrence will be replaced if you use a string as key.
      // You can use a global regex to replace all occurrences.
      key: /__ENV__/g,
      value: process.env.NODE_ENV
    },
    {
      // Use cases: getting NODE_ENV, package.json values,
      // custom configuration JSON, generate random string, etc.
      key: /{#VERSION}/g,
      value: 'v1.0.0'
    },
    {
      key: 'remove_me'
      // If value is omitted, the replacement is the empty string
    }
  ],
  // By default replacer uses String.replace() function.
  // If you want to use a different function, you can supply
  // your own replacement function here with this signature:
  //  - str (string) - string to be processed
  //  - key (any) - key from the dict
  //  - value (string) - replacement value
  //  - path (string) - the path of the file being processed
  replace: (str, key, value, path) => str.split(key).join(value)
}

For example, to replace __filename with the name of the file being processed, you can use:

replacer: {
  dict: [
    {
      key: /\b__filename\b/,
      // No value needed - the custom replacer below supplies it
    }
  ],
  replace: (str, key, value, path) => {
    return str.split(key).join(`'${path}'`);
  }
}

Public URL Rewrite for index.html

This is needed if you want to be able to run your dev server locally with brunch watch --server, and you also need to be able to ship your app to a domain that is not the root directory of the website. So, say your app will be deployed to https://mywebsite.com/apps/appname. Currently, if you brunch build --production and copy and paste your files over to the server, without making changes to the server your app won't be able to fetch your files. This is cause your files don't live at / which you need them to be when running your dev server, they live at https://mywebsite.com/apps/appname. To rewrite your public url for production, add this to your brunch config under module.exports.plugins.

// replace keys in js files with values in the .env file
    replacer: {
        dict: [
            // Replace pubnub pub key in js files
            {
                key: "__PUBLICURL__",
            },
        ],
    },

This will remove the __PUBLICURL__ when running brunch watch --server

Then, add an override for production build.

module.exports.overrides = {
    production: {
        plugins: {
            // replace keys in js files with values in the .env file
            replacer: {
                dict: [
                    // Replace pubnub pub key in js files
                    {
                        key: "__PUBLICURL__",
                        value: "https://firstfleetinc.com/apps/ffadmindashboard",
                    },
                ],
            },
        },
    },
};

This will overwrite your key __PUBLICURL__ when you bulid for production brunch build --production.

Lastly, add your key __PUBLICURL__ to your index.html file under the assets folder.

<!DOCTYPE html>
<html lang="en" data-theme="dark">
<head>
	<meta charset='utf-8'>
	<meta name='viewport' content='width=device-width,initial-scale=1'>

	<title>Admin Dashboard</title>

    <link rel='icon' type='image/png' href='__PUBLICURL__/icons/favicon.png'>
    <link rel="stylesheet" href="__PUBLICURL__/app.css" />
    <script defer src="__PUBLICURL__/app.js"></script>
</head>

<body>
</body>
</html>

Now, when you run your development server, everything will work just as before, and when you build for production, your public url will be correctly prefexed to your index.html file.

Installation

Install the plugin via npm with npm install --save-dev @firstfleet/replacer-brunch.

License

Licensed under MIT License.

Contributors