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

gulp-bower-normalize

v1.1.3

Published

Takes a list of bower files and normalizes them by as <package name>/<type> where type is inferred by file extension or taken from 'override' section of bower.json

Downloads

476

Readme

gulp-bower-normalize Build Status

Use rules in the bower.json or implicit rules to normalize the files being copied out of bower_components so that a consistent and clean version of the bower dependencies can be checked into the repo. This is intended to work with main-bower-files.

INSTALL

npm install --save-dev gulp-bower-normalize

USAGE

Designed to work with main-bower-files as so:

gulp.task('default', function() {
    var bower = require('main-bower-files');
    var bowerNormalizer = require('gulp-bower-normalize');
    return gulp.src(bower(), {base: './bower_components'})
        .pipe(bowerNormalizer({bowerJson: './bower.json'}))
        .pipe(gulp.dest('./bower_dependencies/'))
});

bower.json

{
    name and otherstuff
    "dependencies": {
        "dependency1": "~1.0.1"
        "dependency2": "~1.0.1"
        "dependency3": "~1.0.1"
        "dependency4": "~1.0.1"
    },
    "overrides": {
        // Muli allows one normalize definition to span multiple dependencies
        // NOTE: This is first one in wins for the multi list and will always
        // defer to the overrides.
        "normalizeMulti": [
            {
                "dependencies": ["dependency1", "dependency2"],
                "normalize": {
                    "img": ["*.jpeg", "*.png", "*.jpg"],
                    "font": ["*.ttf", "*.woff2"]
                }
            },
            {
                "dependencies": ["dependency2", "dependency3"],
                "normalize": {
                    // Note since dependency3 defines js, it won't get this definition
                    "js": ["*.js", "*.less"],
                }
            },
            {
                "dependencies": ["dependency2"],
                "normalize": {
                    // Note since dependency2 already had js defined by the multi, it won't get this definition
                    "js": ["*.*"],
                }
            }
        ],
        // Implicitly normalizes this file by file extension 'dependency1/js/some.js'
        "dependency1": {
            "main": "some.js"
        },
        // Implicitly organized into 'dependency2/js/some.js' 'dependency2/js/some.js'
        "dependency2": {
            "main": ["some.js", "some.css"]
        },
        // Explicitly organized into 'dependency3/js/some.js', 'dependency3/css/some.ext', 'dependency3/css/some.css'
        "dependency3": {
            "main": ["some.js", "some.ext", "some.css"],
            "normalize": {
                "js": "*.js",
                "css": ["*.ext", "*.css"]
            }
        } // dependency4 is implicitly organized into 'dependency4/<ext>/<file>
    }
}

Note: Comments are not valid JSON, so if you're copying this, you'll need to remove them.

API

bowerNormalize(options)

options.basePath

Type: string Default: process.cwd()

Path to search for the bower.json file in.

options.bowerJson

Type: string Default: ./bower.json

Path to bower.json that overrides will come from. This should be relative to options.BasePath.

options.flatten

Type: boolean Default: false

Option to remove the component level folders. This would turn /lib/jquery/js/jquery.js into /lib/js/jquery.js.

Note: If your components have files with the same name then only one of them will be included in the results.

options.typeTop

Type: boolean Default: false

Option to put the type folder on top of the hierarchy. This would turn /lib/jquery/js/jquery.js into /lib/js/jquery/jquery.js.

options.checkPath

Type: boolean Default: false

This option allows a multi-level path on the normalization destination. This allows matching similar to the following:

 "dependency7": {
      "main": ["some.js", "some/other.js"],
      "normalize": {
        "js": "*.js",
        "js/some": "**/some/*.js"
      }
 }

Note: This will not work in conjunction with the flatten option.

Frequently Asked Questions

Unexpected folder normalization

Be aware of your JSON keys of the normalize property of your bower.json.
Only unique JSON keys could be parsed correctly into your expected destination folder structure.

Example

This could lead to unexpected normalization

"normalize": {
  ".": "**/*.scss",
  ".": "**/*.js"
}

The right expression should be

"normalize": {
  ".": ["**/*.scss", "**/*.js"]
}

License

MIT © Myles Bostwick