Skip to content

ncochard/report-missing-dependencies

Repository files navigation

report-missing-dependencies: Check all the dependencies in the package.json

This utility will parse the *.js files and the *.ts files in your src folder to identify all packages used in the import {xxx} from "package" statement. And it will report an error if that package is missing from the package.json.

Features

  • Reports an error if a package (e.g. import {xx} from "my-package") is used in the src folder but not defined in the dependencies section (or peerDependencies section) of the package.json.
  • Reports an error if a type is imported from a package (e.g. import type {MyType} from "my-package") but that package is not in the devDependencies section of the package.json.

Usage

{
    "name": "your-project",
    ...
    "scripts": {
        "tsc": "tsc --build tsconfig.json",
        "build": "report-missing-dependencies && npm run tsc"
    },
    "devDependencies": {
        "report-missing-dependencies": "*"
    }
}

Command line

Usage: report-missing-dependencies [options]

Options:
--cwd <string>                     Execution folder
                                   (default: ".")
--src <string>                     Source folder (default: "src")
--ignoredDependencies <string...>  Packages that are used in the `src` folder
                                   (e.g. `import fs from "fs"`) but do not
                                   need to be added to the `dependencies`
                                   section of the `package.json`.
                                   (default: "fs http net url")
--runtimeDependencies <string...>  Packages that are not used in an import
                                   statement in the `src` folder but still
                                   need to be specified in the `dependencies`
                                   section of the `package.json`.
                                   (default: "")
--testMatch <string...>            The glob patterns uses to detect test files.
                                   (default: "**/__tests__/**/*.?(m|c)[jt]s?(x) **/__stories__/**/*.?(m|c)[jt]s?(x) **/?(*.)+(spec|specs|test|tests|story|stories).?(m|c)[jt]s?(x)")
-h, --help                         display help for command

Configuration

//.rmdrc.js
const builtinModules = require("module").builtinModules;
module.exports = {
    src: "src",
    ignoredDependencies: [...builtinModules],
    runtimeDependencies: [],
    testMatch: [
        "**/__tests__/**/*.?(m|c)[jt]s?(x)",
        "**/__stories__/**/*.?(m|c)[jt]s?(x)",
        "**/?(*.)+(spec|specs|test|tests|story|stories).?(m|c)[jt]s?(x)"
    ]
}

Why

Invalid dependencies in the package.json of a project can cause any issues.

  • E.g. When working on a mono-repo using a toold like NX, a missing dependency on one of the projects in the mono-repo can cause NX not to compile the missing dependency causing errors at runtime.
  • E.g. When working on a mono-repo using a toold like NX, a extraneout dependency on one of the projects in the mono-repo can cause NX compile the extraneous dependency causing a slower development cycle.
  • E.g. If a runtime dependency is incorrectly places in the devDependencies rather than the dependencies, you will not notice any issue in development mode (because yarn install installs all dependencies in the node_modules folder), but you will experience some runtime errors in production (because yarn isntall --production does not install dev dependencies).

You can arguably use depcheck to identify missing dependencies. In fact, depcheck has many more options than report-missing-dependencies. But report-missing-dependencies has the advantage that it can be used in the Continuous Integration pipeline.

About

Scans the src folder for any import statements and report any missing dependencies in the package.json

Resources

License

Stars

Watchers

Forks

Packages

No packages published