0.1.1 • Published 5 years ago
@niklasgrahl/js-mv v0.1.1
js-mv
Move .js file(s) and update all relative imports to/from that file(s) from the command line
For example, js-mv a.js b.js
Install
$ npm install -g @niklasgrahl/js-mv
Usage
// Show help
js-mv
// Rename A.js to B.js (updates all relative imports in your project from A.js to B.js)
js-mv A.js B.js
// Rename src/A.js to src/B.js using bash brace expansion (if you are using bash)
js-mv src/{A,B}.js
// Rename all .test.js files to .spec.js
// <from> get's passed into `new Regexp(from)` and you can reference the capture groups in [to] with $1, $2 etc.
js-mv --regex '(.*).test.js' '$1.spec.js'
// Not specifying a second argument opens your default editor (try it out, it's pretty neat!)
js-mv --regex 'src/(.*).js'
// Group redux files by feature instead of by type
js-mv --regex '(reducers|actions)/([^/]\*).js' '$2/$1.js'
After running the command, all relative imports in your project should have been updated
Caveats
- Only updates
.js
files - Only tested with ES modules (
import
/export
) and I'm not sure how well (if at all) it will work for CommonJS (require
) modules
About
Provides a CLI on top of jscodeshift and refactoring-codemods.
js-mv
does the following for each file specified in from:
- Move the file (unless
--no-move
was provided) - Traverses up the directory tree to the closest package.json
- Finds all .js files in that directory (excluding .gitignored files)
- Uses import-declaration-transform and import-relative-transform codemods to update the imports to/from that file(s) in all .js files found in the previous step
Todo
- Allow for other file extensions than
.js
- Detect if file needs to be moved or not
- Detect what files have been moved based on git diff. This would allow you to move the files with whatever tool you want and
js-mv
would just update the imports for you - Allow renaming import specifier (variable name) using import-specifier-transform
- Make it a lot faster by combining the codemods into one that can rename multiple files at the same time
- Better documentation