Security News
Node.js EOL Versions CVE Dubbed the "Worst CVE of the Year" by Security Experts
Critics call the Node.js EOL CVE a misuse of the system, sparking debate over CVE standards and the growing noise in vulnerability databases.
grunt-rails-asset-digest
Advanced tools
Generates asset fingerprints and appends to an existing rails manifest
Rails 4 significantly changed how the asset manifest is generated. As such if you are still on Rails 3.2 (using manifest.yml) you should use v0.3.2
of this plugin npm install grunt-rails-asset-digest@0.3.2 --save
; v1.4.1
tracks support for Rails 4 and above.
Generates fingerprinted assets and appends entries to a sprockets-rails manifest.json
This plugin is intended to be used by those who are integrating a grunt workflow alongside of the sprockets-rails. As such, this task expects to be run after the sprockets-rails has generated an asset manifest.json file.
This approach works well in that it only manages fingerprinting and manifest modification for the files that are explicitly managed in the files
property and it guarantees that existing entries generated by sprockets-rails will not be touched.
If you are using something like Lineman or Grunt and want more control over an advanced front-end workflow to be used alongside a legacy Rails application. A great candidate for this task is to utilize it during construction of a rich-client JavaScript application that lives inside a Rails application. You can let the Rails asset pipeline manage legacy files, and let your Grunt workflow manage your rich-client files.
Ideally this task should not exist; the best way to build a rich-client JavaScript application is to decouple it completely from the serverside. However this is a reasonable first step in refactoring to extract assets from the world of rails/sprockets and still be able to hook into most rails app deploy processes.
Adjust your rails deployment lifecycle to run this task prior to deploying/uploading assets (whether to a CDN, or just in public/assets
which is where this task will dump fingerprinted assets by default). Here's an example configuration in a Capistrano deploy setup that uses Lineman to manage the lifecycle of a rich-client application that still lives within a rails source tree. (The same techniques will work with vanilla Grunt, you'll just have to manage the task aliasing yourself)
# linemans config/application.coffee
appTasks:
common: [
"sass"
"coffee"
"concat"
]
dist: [
"uglify"
"rails_asset_digest"
"clean"
]
# config/deploy.rb
after 'assets:compress', 'assets:compile_with_lineman', 'assets:upload'
task :compile_with_lineman
logger.important "Compiling other assets with Lineman"
run "lineman build" # run grunt tasks in common and dist phases
end
Note: this is a very narrowly focused task, and you might not get much use out of it :)
This plugin requires Grunt ~0.4.1
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-rails-asset-digest --save-dev
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-rails-asset-digest');
In your project's Gruntfile, add a section named rails_asset_digest
to the data object passed into grunt.initConfig()
.
grunt.initConfig({
rails_asset_digest: {
options: {
algorithm: 'md5', // default fingerprinting algorithm to use
assetPath: 'public/assets' // default location where manifest.json lives
},
your_target: {
files: {
// dest : src
"public/assets/javascript-file.js" : "input/path/to/javascript-file.js",
"public/assets/sourcemap-file.js.map" : "input/path/to/sourcemap-file.js.map",
"public/assets/style.css" : "input/path/to/style.css"
}
},
},
})
Given the configuration in the Overview section above, you can expect grunt rails_asset_digest
to output the following to public/assets
ls -la public/assets
manifest.json
javascript-file-a5a14aa0f19b8fe989f3b79fc72b9b36.js
sourcemap-file-365b31e16181703b506e90b57f95b568.js.map
style-1fd9137f040f2440d26da164c65e7f66.css
And the associaated fingerprinted entries in manifest.json like so:
{
"files" : {
"javascript-file-a5a14aa0f19b8fe989f3b79fc72b9b36.js" : {
"mtime": "2014-02-04T18:14:52.0",
"digest": "a5a14aa0f19b8fe989f3b79fc72b9b36",
"size": 32,
"logical_path": "javascript-file.js"
},
"sourcemap-file-365b31e16181703b506e90b57f95b568.js.map" : {
"mtime": "2014-02-04T18:14:52.0",
"digest": "365b31e16181703b506e90b57f95b568",
"size": 49,
"logical_path": "sourcemap-file.js.map"
},
"style-1fd9137f040f2440d26da164c65e7f66.css" : {
"mtime": "2014-02-04T18:14:52.0",
"digest": "1fd9137f040f2440d26da164c65e7f66",
"size": 17,
"logical_path": "style.css"
}
},
"assets" : {
"javascript-file.js" : "javascript-file-a5a14aa0f19b8fe989f3b79fc72b9b36.js",
"sourcemap-file.js" : "sourcemap-file-365b31e16181703b506e90b57f95b568.js.map",
"style.css" : "style-1fd9137f040f2440d26da164c65e7f66.css"
}
}
Type: String
Default value: md5
The digest algorithm used to fingerprint the assets, note: Rails 4 (via the sprockets-rails plugin) doesn't actually use an MD5 hash based on the contents of the file anymore, it just uses a random hex digest. It doesn't matter what value is in the hash of the filename as long as the entry in the manifest matches the name of the file on disk.
Type: String
Default value: public/assets
The location of the rails asset path
Type: String
Default value: manifest.json
The name of the manifest file, so you can provide your own secret to prevent people guessing the name if so desired.
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.
npm install
npm test
MIT
FAQs
Generates asset fingerprints and appends to an existing rails manifest
The npm package grunt-rails-asset-digest receives a total of 2 weekly downloads. As such, grunt-rails-asset-digest popularity was classified as not popular.
We found that grunt-rails-asset-digest demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Security News
Critics call the Node.js EOL CVE a misuse of the system, sparking debate over CVE standards and the growing noise in vulnerability databases.
Security News
cURL and Go security teams are publicly rejecting CVSS as flawed for assessing vulnerabilities and are calling for more accurate, context-aware approaches.
Security News
Bun 1.2 enhances its JavaScript runtime with 90% Node.js compatibility, built-in S3 and Postgres support, HTML Imports, and faster, cloud-first performance.