simple-codemod-script
This is an example of how to write your own codemod scripts using babel and recast.
There are comments throughout the code explaining what’s happening, with links to resources.
To write codemods for your own codebase using the same patterns as this script, fork this repo, modify it to your needs, and add codemods to the codemods folder.
Usage
- Clone the repo
- Run
npm install - Add codemods to the
codemodsfolder (usingreact-to-star-import.tsas an example) - Optional: put the code you want to modify in the
srcfolder - Run
npm startwith 1-2 command-line arguments:- First argument is the name of the codemod to run, as defined by its object key in
codemods/index.ts. For example,react-to-star-import. - Second argument is optional, and is a glob string indicating which files to run the codemod against. It defaults to
"./src/**/*.{js,jsx,ts,tsx}". If the code you want to codemod isn’t in thesrcfolder, you may wish to specify a different glob; for instance,"/home/me/my-code/src/**/*.{js,jsx,ts,tsx}".
- First argument is the name of the codemod to run, as defined by its object key in
Tips
- You can comment out the line in
run-codemod.tsthat callsfs.writeFileSyncto test your codemod without affecting the files themselves; Before/After content will still be printed, but the input files won’t be modified.
Explanation of dependencies
@babel/core: Required peer dependency of babel packages.@babel/parser: Package that can convert a string of JavaScript/TypeScript/Flow code into an Abstract Syntax Tree (AST).@babel/types: Package containing AST Node builders and TypeScript types for AST Nodes.@types/node: Package containing TypeScript types for node.js itself.chalk: Provides functions for wrapping strings with control characters that makes them appear in different colors when they are printed to the terminal screen.globby: Provides a function that resolves a glob string (eg “./*/.js”) into a list of files that match that glob string.recast: Wraps an AST with getters/setters/proxies/etc so that it can keep track of mutations to the AST, and then re-print it later in such a way that the source formatting is unaffected except for in places where the AST was modified.typescript: Type checker and autocomplete provider; installed to improve developer experience when writing codemod scripts in Visual Studio Code.xode: Replacement for thenodeCLI that can parse (and ignore) TypeScript syntax. Acts as a stand-in forts-node, becausets-nodeperforms type checking prior to executing code, which can be annoying when running small scripts or interacting with the CLI.
License
MIT