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

grunt-indexify

v0.2.3

Published

Use build blocks to replace non-optimized scripts and stylesheets to their optimized versions in your html.

Downloads

37

Readme

grunt-indexify

Use build blocks to replace scripts and stylesheets references to their optimized versions.

Getting Started

This plugin requires Grunt ~0.4.5

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-indexify --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-indexify');

The "indexify" task

  1. Replace the references of scripts and stylesheets within HTML files dynamically to their minified versions.
  2. Minify (uglify) the js-files if necessary. Minified files is stored in a temporary folder. If a file is already minified it wont minify it again. This way you can mix minified and unminified js-files in your HTML markup.
  3. Concat the files in the order they appear in the HTML markup to a minified version defined in the build block.
  4. Delete the temporary folder.

Dependencies

indexify use the following plugins to optimize files:

To install these plugins, run:

npm install grunt-contrib-uglify grunt-contrib-concat grunt-contrib-cssmin --save-dev

Overview

In your project's Gruntfile, add a section named indexify to the data object passed into grunt.initConfig().

grunt.initConfig({
  indexify: {
    options: {
      // Task-specific options go here.
    },
    your_target: {
      // Target-specific file lists and/or options go here.
    },
  },
});

Blocks

Define build blocks in your HTML markup to indicate which files to be minified and concatenated. To accomplish this indexify dynamically updates the configuration of concat, uglify, and cssmin. Multiple build blocks may be used in a single file.

Blocks are expressed as:

<!-- build:<type> <path> -->
... HTML Markup, list of scripts/stylesheets.
<!-- endbuild -->
  • type: can be js or css
  • path: the file path of the optimized file, the target output

Usage Example

The following example will replace the defined build block in src/index.html to <script src="js/script.min.js"></script> in the destination file dist/index.html.

Then it will uglify (if necessary) and concat the js-files and save an optimized version to dist/js/script.min.js.

In grunt.js

grunt.initConfig({
  indexify: {
    files: {
      src: ['src/index.html'],
      dest: 'dist/index.html'
    }
  },
});

In src/index.html

<!-- build:js js/script.min.js -->
<script src="js/script.js"></script>
<script src="js/another-script.js"></script>
<script src="js/vendor/script.js"></script>
<script src="js/vendor/another-script.js"></script>
<!-- endbuild -->

Desired output in dist/index.html

<script src="js/script.min.js"></script>

Options

minSuffix

Type: string
Default: .min

If the filename has this suffix it won't be minified. e.g. jquery.min.js.

minifyExceptions

Type: array
Default: []

An array with filenames that won't be be minified.

root

Type: string
Default: ''

The root directory from which your files will be resolved. e.g. this is useful if you load your content on a different level with AJAX and the src of the files will be incorrect.

tmpFolder

Type: string
Default: indexify-tmp/

The location where indexify temporary stores the minified files before concatenating.

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.

Release History

  • 0.1.0 - First release.
  • 0.2.0 - Added uglify, concat and cssmin functionality.
  • 0.2.1 - Bug fixes: Files with the same destination is only optimized once now. The root option now works as intended.
  • 0.2.2 - Minor bug fixes.
  • 0.2.3 - Compatible with Node v6. Error "Warning: Path must be a string..." solved.