UNPKG

check-licenses

Version:

Check the licenses for the packages that you are using

147 lines (118 loc) 5.75 kB
# Check Licenses [![npx check-licenses](https://img.shields.io/badge/npx-check--licenses-blue.svg)](https://www.npmjs.com/package/check-licenses) [![test badge](https://github.com/franciscop/check-licenses/workflows/tests/badge.svg)](https://github.com/franciscop/check-licenses/blob/master/.github/workflows/tests.yml) A simple tool to check all the licenses in your dependencies: <img src="./assets/demo.webp" alt="Example command" width="400px" /> - Find all dependencies and their sub-dependencies in your project - Validate both the `package.json` and the `LICENSE` file per dependency - Only reads `dependencies` and not `devDependencies` - Uses `package-lock.json` for deterministic resolution - Handles multiple versions of the same library just fine ## Getting started You can either use `npx check-licenses`, or install this library globally and then run it at once: ```bash npm i check-licenses -g licenses # Note how this is just `licenses` licenses --list licenses --help # Or use the library straight from npm npx check-licenses npx check-licenses --list npx check-licenses --help npx --yes check-licenses # To avoid being asked to install it, e.g. in a CI ``` The main command will trigger a license summary: ```bash $ licenses MIT —————————————————— 56 ISC —————————————————— 7 CC0-1.0 —————————————— 4 BSD-2-Clause ————————— 2 Apache-1.0 ——————————— 2 Apache-2.0 ——————————— 2 CC-BY-3.0 ———————————— 1 ``` If you want to dig deeper and see which package uses what license, use the `--list` flag. ## Show the licenses used The base command is to count how many licenses of each type are in use: ```bash $ licenses MIT —————————————————— 1328 ISC —————————————————— 113 CC0-1.0 —————————————— 36 BSD-3-Clause ————————— 36 Apache-2.0 ——————————— 5 BSD-2-Clause ————————— 3 Zlib ————————————————— 1 CC-BY-3.0 ———————————— 1 GPL-2.0 —————————————— 1 ``` ## List all dependencies This can be used to find out what each of our dependencies (direct and indirect) is using. It might list multiple licenses in a single package: ```bash $ licenses --list ... test-exclude@5.2.3 ————————————— ISC text-table@0.2.0 ——————————————— MIT textarea-caret@3.0.2 ——————————— MIT throat@4.1.0 ——————————————————— MIT through@2.3.8 —————————————————— Apache-2.0 + MIT through2@2.0.5 ————————————————— MIT thunky@1.1.0 ——————————————————— MIT timers-browserify@2.0.11 ——————— MIT ... ``` This list is normally quite long, but it can be easily `grep`-ed. For example, to find all of the `Apache-2.0` licenses: ```bash $ licenses --list | grep Apache-2.0 fb-watchman@2.0.1 —————————————— Apache-2.0 forever-agent@0.6.1 ———————————— Apache-2.0 formik@2.1.5 ——————————————————— Apache-2.0 + MIT harmony-reflect@1.6.1 —————————— Apache-2.0 + MPL-1.1 human-signals@1.1.1 ———————————— Apache-2.0 ``` If there are multiple licenses in a library it's marked with a `+`. You can indeed also grep that! ```bash $ licenses --list | grep + ... are-we-there-yet@1.1.5 ————————— ISC + MIT atob@2.1.2 ————————————————————— Apache-2.0 + MIT detect-node@2.0.4 —————————————— ISC + MIT electron-to-chromium@1.3.534 ——— ISC + MIT formik@2.1.5 ——————————————————— Apache-2.0 + MIT fs.realpath@1.0.0 —————————————— ISC + MIT harmony-reflect@1.6.1 —————————— Apache-2.0 + MPL-1.1 json-schema@0.2.3 —————————————— AFLv2.1 + BSD killable@1.0.1 ————————————————— ISC + MIT lodash-es@4.17.15 —————————————— CC0-1.0 + MIT lodash.memoize@4.1.2 ——————————— CC0-1.0 + MIT ... ``` ## Finding bad licenses Let's say you run this tool and find the dependencies, of which you really don't want to follow CC-BY-3.0: ```bash $ licenses DOC —————————————————— 56 MIT —————————————————— 56 ISC —————————————————— 7 CC0-1.0 —————————————— 4 BSD-2-Clause ————————— 2 Apache-1.0 ——————————— 2 Apache-2.0 ——————————— 2 CC-BY-3.0 ———————————— 1 ``` Then you can also use it to track down which dependencies have this license: ```bash $ licenses --list | grep CC-BY-3.0 spdx-exceptions@2.3.0 ——————— CC-BY-3.0 ``` With this information you can either: - Dig deeper: some times it might be dual-licensed - Find out where this comes from with `npm ls`: ```bash $ npm ls spdx-exceptions check-licenses@0.2.0 /home/francisco/check-licenses └─┬ meow@8.0.0 └─┬ normalize-package-data@3.0.0 └─┬ validate-npm-package-license@3.0.4 └─┬ spdx-expression-parse@3.0.1 └── spdx-exceptions@2.3.0 ```