import from declarations,
require calls then updates or removes package.json dependencies (if
update option described below is set to
true, otherwise you only get informed) from package.json files. Works great with single-package modules as well as with big projects with multiple package.json files (for example if you have a monorepo powered by lerna).
npm i -D check-imports and use:
How it works
- The library gets all .js, .jsx, .ts files by a given path;
- Builds their AST trees via @babel/parser;
- Retrieves import paths from
- Runs some filters and mappings:
- Ignore relative paths;
- Ignore built-in NodeJS modules such as
- Retrieve module names (
- Retrieve module names from scoped packages (
- Get rid of Webpack syntax (
- Finds a "parent" (a closest) package.json file;
- Compares its contents with the retrieved list of imports and if
updateoption is set to
truethe script updates it.
ignoreoption is provided then
"dependencies"aren't going to be updated with a given dependency or multiple dependencies;
- If a dependency already exists either at
"dependencies"aren't going to be updated and a dependency version remains the same;
- If neither of things above is happened then a dependency of a latest version retrieved from NPM registry is going to be added to
Note that after an update you still need to run
npm install manually.
A bonus: imports can be ignored directly in code via
; // check-imports-ignore-line
The tool can be run via
--update- update parent package.json files.
--throw-error- exit process with code 1 in case if there are redundant or missing dependencies (good for CI).
--ignore-path <items>- a glob pattern (or coma-delimited patterns) to ignore processed files (
--ignore-imports <items>- a comma-delimited list of dependencies that don't need to appear at
const checkImports = ;
The API includes a bit wider set of options. It allows to map dependencies to check if a dependency needs to be ignored or get a wanted version. It also allows to set a list of babel plugin passed to
babelParser in case if you need to make the tool work with flow syntax for example.
const results = await ;
update = false- either update package.json files or not.
throwError = false- throw an error in case if there are redundant or missing dependencies
log = false- print CLI output
ignorePath = - a glob pattern or an array of patterns to ignore processed files.
babelPlugins = require('./defaultBabelPlugins')- a list of parser plugins described there.
processManually = null- a function which is run agains every found import. You may want to define it in case if you want to ignore some dependencies or set a wanted version. It should return either of the following values:
true- process a dependency a regular way.
false- ignore a dependency.
- An object with optional keys
versionfield makes possible to forcibly define a dependency version.
typefield defines a key at package.json where a dependency needs to be stored (
"peerDependencies"or any custom). By default its value is
const results = await;