Grunt task to run codemods using jscodeshift
jscodeshift is a tool for running codemods over multiple js files in parallel, which is great for refactoring large codebases. Read more about it here.
grunt-jscodeshift
is a simple Grunt task that wraps the jscodeshift runner and lets you execute transformations as part of your Grunt workflow.
Original source code file
code.js
var myHeading = document.querySelector('h1');
myHeading.textContent = 'Hello world!';
Transform file
transform.js
module.exports = function transformer(file, api) {
var j = api.jscodeshift;
return j(file.source)
.find(j.Identifier)
.replaceWith(function(p) {
return j.identifier(p.node.name.split('').reverse().join('')); })
.toSource();
};
Transformed source code file
code.js
var gnidaeHym = tnemucod.rotceleSyreuq('h1');
gnidaeHym.tnetnoCtxet = 'Hello world!';
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-jscodeshift --save-dev
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-jscodeshift');
grunt.initConfig({
"jscodeshift": {
"some-target": {
"options": {
"transform": "./transform.js"
},
"src": ["src/**/*.js"]
}
},
});
Since jscodeshift is designed for code-modifications, it overwrites the source files it iterates over.
If this is not your desired behavior, clone the files beforehand with grunt-contrib-copy.
The options
object is passed to jscodeshift
. See the jscodeshift documentation for all options.
Type: String
Default value: './transform.js'
Path to the transform file.
Feel free to open issues and send pull-requests.
Run npm test