grunt-importsrc

Import scripts and stylesheets paths from HTML files into your Gruntfile.

grunt-importsrc

Import scripts and stylesheets paths from HTML files into your Gruntfile.
You can update an existing Grunt task like Uglify, mincss, etc. or just concatenate those imported files.

If you are bored of having to copy and paste file paths of scripts or stylesheets from your HTML to your Gruntfile, this plugin can help you.

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, install this plugin with this command:

$ npm install grunt-importsrc --save-dev

This plugin is only compatible with Grunt >= 0.4.0.

Add importsrc to your Grunt file.

importsrc: {
  dist: {
    files: {
      'dist/index.html': 'src/index.html' // dest: source 
    }
  }
}

Into your HTML file (here src/index.html), add importsrc sections with HTML comments.
You define importsrc options in those comments (see below for more informations).

<!-- importsrc <option>:<path> -->  
[List of script or link tags]  
<!-- endimportsrc -->  

Update paths of source files of an existing Grunt task.

Example with the uglify task ("list" format):

[Gruntfile.js]
 
importsrc: {
  dist: {
    files: {
      'dist/index.html': 'src/index.html'
    }
  }
},
uglify: {
  dist: {
    files: {
      'dist/app.js': [/* Source files will be updated by the importsrc task */]
    }
  },
  options: {
    mangle: true
  }
}
[src/index.html]
 
<!-- importsrc update:uglify.dist.files['dist/app.js'] -->
<script src="scripts/vendors/plugin.js"></script>
<script src="scripts/file-1.js"></script>
<script src="scripts/file-2.js"></script>
<!-- endimportsrc -->

Will render:

[dist/index.html]
 
<script src="app.js"></script>

Example with the mincss task ("full" format):

[Gruntfile.js]
 
importsrc: {
  dist: {
    files: {
      'dist/index.html': 'src/index.html'
    }
  }
},
mincss: {
  dist: {
    src: [/* Source files will be updated by the importsrc task */],
    dest: 'dist/app.css'
  }
}
[src/index.html]
 
<!-- importsrc update:mincss.dist.src -->
<link rel="stylesheet" href="styles/reset.css">
<link rel="stylesheet" href="styles/main.css">
<!-- endimportsrc -->

Will render:

[dist/index.html]
 
<script src="app.css"></script>

Concatenates script or stylesheet files list.

Example:

<!-- importsrc concat:path/to/dest/file.(css|js) -->
[...]
<!-- endimportsrc -->
[src/index.html]
 
<!-- importsrc concat:dist/app.js -->
<script src="scripts/file-1.js"></script>
<script src="scripts/file-2.js"></script>
<!-- endimportsrc -->

Will render:

[dist/index.html]
 
<script src="app.js"></script>

Change the dest file path of an existing Grunt task.

In case you need to change it.

Example:

[src/index.html]
 
<!-- 
  importsrc
  update:exotic.task.sources
  dest:dist/file.css -->
<link rel="stylesheet" href="styles/reset.css">
<link rel="stylesheet" href="styles/main.css">
<!-- endimportsrc -->

Will render:

[dist/index.html]
 
<script src="file.css"></script>

Replace the generated file path.

By default, file paths are relative to the generated HTML file.
But you can change those paths with this option.

Example without the replace option:

[src/index.html]
 
<!-- importsrc
  update:update:mincss.dist.src -->
<link rel="stylesheet" href="styles/reset.css">
<link rel="stylesheet" href="styles/main.css">
<!-- endimportsrc -->

Will render:

[dist/index.html]
 
<script src="file.css"></script>

Example with the replace option:

[src/index.html]
 
<!-- importsrc
  update:update:mincss.dist.src
  replace:a/new/path/to/file.css -->
<link rel="stylesheet" href="styles/reset.css">
<link rel="stylesheet" href="styles/main.css">
<!-- endimportsrc -->

will render:

[dist/src]
 
<script src="a/new/path/to/file.css"></script>
[Gruntfile.js]
 
grunt.initConfig({
  uglify: {
    example: {
      files: {
        'example/dist/min.js': []
      }
    }
  },
  mincss: {
    example: {
      files: {
        'example/dist/min.css': []
      }
    }
  },
  importsrc: {
    example: {
      files: {
        'example/dist/index.html': 'example/index.html'
      }
    }
  }
});
 
grunt.registerTask('example', ['importsrc:example', 'uglify:example', 'mincss:example']);

Execute the command grunt example and see example/ folder.

  • 02/2013 - 0.1.0 - Initial release

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.

Copyright (c) 2013 Antoine Lehurt
Licensed under the MIT license.