Automate repetitive modifications to JavaScript source code using jscodeshift
Convert relative imports from a list of top level directories to absolute imports.
- ignores absolute imports
import ... from 'directory'
is an absolute import
- ignores relative imports that refer to the current directory
import ... from './directory'
is a relative import using the current directory
- ignores imports that are not relative imports
import ... from '../directoryA'
is a relative importimport ... from '.../directoryA'
is not a relative import
- ignores imports that are not top level imports
import ... from '../directoryA'
is a top level import if the rootDirectory isrootDirectory/
and the file is atrootDirectory/directoryB/file.js
import ... from '../../directoryA'
is not a top level import if the rootDirectory isrootDirectory/directoryA
and the file is atrootDirectory/directoryB/file.js
- ignores imports of directories that are not in the whitelist of top level directories
import ... from '../directoryA/directoryB'
is in the top level directory whitelist ofdirectoryA
import ... from '../directoryA/directoryB'
is not in the top level directory whitelist ofdirectoryB
jscodeshift -t transforms/relative-to-absolute-import.js rootDirectory/topLevelDirectory/file.js --parser=flow --rootDirectory=rootDirectory/ --directories='topLevelDirectory' --prefix='myPrefix' -d -p
- rootDirectory:
--rootDirectory:'rootDirectory'
sets the location of the root directory where top level directories live - directories:
--directories:'directoryA,directoryB'
makes the whitelist of top level directories['directoryA', 'directoryB']
- prefix:
--prefix='myPrefix'
will replaceimport form '../directoryA'
withimport ... from 'myPrefix/directoryA'
Using astexplorer.net
makes writing a codemod much easier!
npm test