
Research
Node.js Fixes AsyncLocalStorage Crash Bug That Could Take Down Production Servers
Node.js patched a crash bug where AsyncLocalStorage could cause stack overflows to bypass error handlers and terminate production servers.
Append a unique hash to filename. Optionally create a manifest mapping. Optionally rewrite references to updated filenames.
Prepare front-end assets for cache-busting / versioning / hashing.
This plugin includes three functions:
rev(): Rename files by appending a unique hash, based on contents.revManifest(): Create a manifest that maps old filenames to newly versioned filenames. (optional)revReplace(): Update all references to versioned files. (optional)Make sure to set the files to never expire for this to have an effect.
$ npm install --save-dev @taskr/rev
The rev() task is the core method; thus is required for anything to occur.
Both revManifest() and revReplace() are optional plugins.
exports.default = function * (task) {
yield task.source('app/**/*')
.rev({
ignores: ['.html', '.jpg', '.png']
})
.revManifest({
dest: 'dist',
file: 'manifest.json',
trim: str => str.replace(/app\/client/i, 'assets')
})
.revReplace({
ignores: ['.php']
})
.target('dist');
}
Generate a unique hash (based on a file's contents) and append it to the filename.
bundle.js
//=> bundle-{hash}.js
bundle.min.js
//=> bundle-{hash}.min.js
Any files that are processed will receive two new keys: orig and hash. In addition, the base key will be updated with the new, versioned filename.
Type: array
Default: ['.png', '.jpg', '.jpeg', '.svg', '.gif', '.woff', '.ttf', '.eot', '.html', '.json']
A list of file extensions that should NOT be renamed/processed.
Note: This includes
.htmland.jsonwhilerevReplacedoes not.
Create a manifest file that relates old filenames to versioned counterparts.
Type: string
Default: 'rev-manifest.json'
The name of the manifest file to be created.
Type: string
Default: task.root
The directory where your manifest file should be created. Defaults to Taskr's root directory (where taskfile.js is found).
Type: boolean
Default: true
Whether or not the manifest's contents should be sorted alphabetically. (Does not add any performance / usage benefits.)
Type: string or function
Default: .
Edit the final keys & values within the manifest. If string, the value will be resolved relative to Taskr's root directory. Using a function provides more fine-tuned control.
yield task.source('app/client/*.js').rev()
.revManifest({trim: 'app'}).target('dist');
//=> "client/demo.js": "client/demo-1abd624s.js"
yield task.source('app/client/*.js').rev()
.revManifest({
trim: str => str.replace(/app\/client/i, 'assets')
}).target('dist');
//=> "assets/demo.js": "assets/demo-1abd624s.js"
Update references to all versioned files within a given source.
Matching files from within task.source() are available for inspection & modifications. Because of this, it is recommended that all your rev-* usage is extracted to a separate, production-only task whose source includes all development files.
Type: array
Default: ['.png', '.jpg', '.jpeg', '.svg', '.gif', '.woff', '.ttf', '.eot']
A list of file extensions whose content should not be updated.
Note: Unlike
.rev(), this list does not include.htmland.json.
Any issues or questions can be sent to the Taskr monorepo.
Please be sure to specify that you are using @taskr/rev.
MIT © Luke Edwards
FAQs
Append a unique hash to filename. Optionally create a manifest mapping. Optionally rewrite references to updated filenames.
We found that @taskr/rev 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.

Research
Node.js patched a crash bug where AsyncLocalStorage could cause stack overflows to bypass error handlers and terminate production servers.

Research
/Security News
A malicious Chrome extension steals newly created MEXC API keys, exfiltrates them to Telegram, and enables full account takeover with trading and withdrawal rights.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.