This page covers creation of stand-alone codeshift packages and is for authors who want:
- Control over where and how your codeshift package is hosted
- Control over tooling, dependencies and techstack
- The option to create completely generic codemods that don't target specific packages
If you prefer to not to maintain a separate package, please see the Authoring guide for other options.
To create a standalone codeshift package automatically, install the install and use the
npm install -g @codeshift/clior
yarn global add @codeshift/cli
Then given you want to initialize a new project called "foobar", with a codemod targeting version
10.0.0 you can run the following command:
$ codeshift init --package-name="foobar" --version="10.0.0" ~/Desktop
This will create a new directory called "foobar" in the
You can then also initialize subsequent transforms and presets by running the command again:
$ codeshift init --package-name="foobar" --preset="sort-imports" ~/Desktop
The file structure of your new codeshift package will look like this:
codeshift.config.js // main entrypoint containing configuration and references to your transforms
10.0.0/ // semver version
transform.ts // main logic (should contain a transformer)
transform.spec.ts // main tests
motions/ // utility directory
Now to test your transformer, run
yarn test --watch.
See the Testing guide for help getting started with unit tests.
Since your new codeshift package can simply be treated as an NPM package you can simply run
npm version [patch\minor\major] and
Your package will now be accessible via the
codeshift/cli. Refer to the Consuming guide for information about how to run your new codemods.
Here are some helpful example of this setup working in the wild: