https://github.com/smarlhens/npm-check-engines
Compute package engines constraint to the most restrictive range version used by your dependencies.
https://github.com/smarlhens/npm-check-engines
check engines nce node nodejs npm npm-check-engines typescript
Last synced: 10 months ago
JSON representation
Compute package engines constraint to the most restrictive range version used by your dependencies.
- Host: GitHub
- URL: https://github.com/smarlhens/npm-check-engines
- Owner: smarlhens
- License: mit
- Created: 2022-05-29T12:34:43.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2025-07-29T06:39:58.000Z (11 months ago)
- Last Synced: 2025-07-29T08:48:48.607Z (11 months ago)
- Topics: check, engines, nce, node, nodejs, npm, npm-check-engines, typescript
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/@smarlhens/npm-check-engines
- Size: 1.54 MB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# NPM check engines
[](https://github.com/smarlhens/npm-check-engines/actions/workflows/codeql.yml)
[](https://github.com/smarlhens/npm-check-engines/actions/workflows/ci.yml)

[](https://github.com/smarlhens/npm-check-engines)
[](https://github.com/prettier/prettier)
[](https://conventionalcommits.org)
**npm-check-engines upgrades your package.json node engines constraint to the most restrictive used by your dependencies.**
---
## Table of Contents
- [Prerequisites](#prerequisites)
- [Installation](#installation)
- [Usage](#usage)
- [CLI](#cli)
- [Node](#node)
- [CLI Options](#cli-options)
- [Debug](#debug)
- [Thanks](#thanks)
---
## Prerequisites
- [Node.JS](https://nodejs.org/en/download/) **version ^18.12.0 || ^20.0.0**
---
## Installation
Install globally:
```sh
npm install -g @smarlhens/npm-check-engines
```
Or run with [npx](https://docs.npmjs.com/cli/v8/commands/npx):
```sh
npx @smarlhens/npm-check-engines
```
---
## Usage
### CLI
Show the most restrictive constraint (**opinionated**) of the node engine for the project in the current directory based on the npm `package-lock.json` file:
```sh
$ nce
✔ Computed engines range constraints:
node * → ^14.17.0 || ^16.10.0 || >=17.0.0
Run nce -u to upgrade package.json.
```
Upgrade a project's `package.json` file:
```sh
$ nce -u
✔ Computed engines range constraints:
node * → ^14.17.0 || ^16.10.0 || >=17.0.0
```
### Node
```typescript
import { checkEnginesFromString, validatePackageJson, validatePackageLock } from '@smarlhens/npm-check-engines';
let packageJsonString = ''; // load content of package.json as stringified JSON
let packageLockString = ''; // load content of package-lock.json as stringified JSON
validatePackageJson({ packageJsonString }); // can throw Errors if unexpected format
validatePackageLock({ packageLockString }); // can throw Errors if unexpected format
// packageJson is the content of your package.json with updated engines
// packageLock is the content of your package-lock.json with updated engines of the root project in packages
// enginesRangeToSet contains changes if you want to display them
const { enginesRangeToSet, packageJson, packageLock } = checkEnginesFromString({
packageJsonString,
packageLockString,
});
console.log(packageJson);
console.log(packageLock);
console.log(
enginesRangeToSet
.map(({ engine, range, rangeToSet }) => `${engine} range "${range}" replaced by "${rangeToSet}"`)
.join('\n'),
);
```
---
## CLI Options
```text
Usage: nce [options]
Options:
-q, --quiet Enable quiet mode. [boolean] [default: false]
-d, --debug Enable debug mode. Can be used with environment variable DEBUG=nce.
[boolean] [default: false]
-v, --verbose A little more detailed than the default output. [boolean] [default: false]
-e, --engines Select engines to check. Default will check all engines defined. [array]
-u, --update Update engines in package.json and package-lock.json. [boolean] [default: false]
--enableEngineStrict Enable engine strict. [boolean] [default: false]
--help Show help [boolean]
--version Show version number [boolean]
Examples:
nce Check package-lock.json file in current working directory.
© 2023 Samuel MARLHENS
```
---
## Debug
```sh
$ DEBUG=* nce -d
```
output with debug
```text
[STARTED] Checking npm package engines range constraints in package-lock.json...
[STARTED] Reading package-lock.json...
[SUCCESS] Reading package-lock.json...
[STARTED] Reading package.json...
[SUCCESS] Reading package.json...
[STARTED] Validating package-lock.json...
[SUCCESS] Validating package-lock.json...
[STARTED] Validating package.json...
[SUCCESS] Validating package.json...
[STARTED] Compute engines range constraints...
nce:node Package has no constraints for current engine +0ms
nce:node Final computed engine range constraint: * +1ms
nce:node Package has no engines +0ms
nce:node Compare: * and >=6.9.0 +1ms
nce:node Range >=6.9.0 is a subset of * +1ms
nce:node New most restrictive range: >=6.9.0 +0ms
nce:node Compare: >=6.9.0 and >=12.22.0 +0ms
nce:node Range >=12.22.0 is a subset of >=6.9.0 +0ms
nce:node New most restrictive range: >=12.22.0 +0ms
nce:node Ignored range: * +0ms
nce:node Compare: >=12.22.0 and >=7.0.0 +1ms
nce:node Range >=12.22.0 is a subset of >=7.0.0 +0ms
nce:node Package node_modules/noengines has no engines +0ms
nce:node Compare: >=12.22.0 and >=12.13.0 <13.0.0-0||>=14.15.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 +1ms
nce:node Applying minimal version 12.22.0 to both ranges. +0ms
nce:node Compare: >=12.22.0 and >=12.22.0 <13.0.0-0||>=14.15.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 +1ms
nce:node Range >=12.22.0 <13.0.0-0||>=14.15.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 is a subset of >=12.22.0 +0ms
nce:node New most restrictive range: >=12.22.0 <13.0.0-0||>=14.15.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 +0ms
nce:node Compare: >=12.22.0 <13.0.0-0||>=14.15.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 and >=16.0.0||>=14.17.0 <15.0.0-0 +1ms
nce:node Applying minimal version 14.17.0 to both ranges. +0ms
nce:node Compare: >=14.17.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 and >=14.17.0 <15.0.0-0||>=16.0.0 +0ms
nce:node Range >=14.17.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 is a subset of >=14.17.0 <15.0.0-0||>=16.0.0 +0ms
nce:node New most restrictive range: >=14.17.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 +1ms
nce:node Final computed engine range constraint: >=14.17.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 +0ms
nce:npm Package has no constraints for current engine +0ms
nce:npm Final computed engine range constraint: * +0ms
nce:npm Package has no engines +0ms
nce:npm Package node_modules/foo has no constraints for current engine +0ms
nce:npm Compare: * and >=6.0.0 +1ms
nce:npm Range >=6.0.0 is a subset of * +0ms
nce:npm New most restrictive range: >=6.0.0 +0ms
nce:npm Package node_modules/all has no constraints for current engine +0ms
nce:npm Package node_modules/arr has no constraints for current engine +0ms
nce:npm Package node_modules/noengines has no engines +0ms
nce:npm Package node_modules/complex1 has no constraints for current engine +0ms
nce:npm Package node_modules/complex2 has no constraints for current engine +0ms
nce:npm Final computed engine range constraint: >=6.0.0 +0ms
nce:yarn Package has no constraints for current engine +0ms
nce:yarn Final computed engine range constraint: * +0ms
nce:yarn Package has no engines +0ms
nce:yarn Package node_modules/foo has no constraints for current engine +1ms
nce:yarn Compare: * and >=1.22.4 <2.0.0-0 +0ms
nce:yarn Range >=1.22.4 <2.0.0-0 is a subset of * +0ms
nce:yarn New most restrictive range: >=1.22.4 <2.0.0-0 +0ms
nce:yarn Package node_modules/all has no constraints for current engine +0ms
nce:yarn Package node_modules/arr has no constraints for current engine +0ms
nce:yarn Package node_modules/noengines has no engines +0ms
nce:yarn Package node_modules/complex1 has no constraints for current engine +0ms
nce:yarn Package node_modules/complex2 has no constraints for current engine +0ms
nce:yarn Final computed engine range constraint: >=1.22.4 <2.0.0-0 +0ms
[SUCCESS] Compute engines range constraints...
[STARTED] Output computed engines range constraints...
nce:node Simplified computed engine range constraint: ^14.17.0 || ^16.10.0 || >=17.0.0 +0ms
nce:npm Simplified computed engine range constraint: >=6.0.0 +0ms
nce:yarn Simplified computed engine range constraint: ^1.22.4 +0ms
[TITLE] Computed engines range constraints:
[TITLE]
[TITLE] node * → ^14.17.0 || ^16.10.0 || >=17.0.0
[TITLE] npm * → >=6.0.0
[TITLE] yarn * → ^1.22.4
[TITLE]
[TITLE] Run nce -d -u to upgrade package.json.
[SUCCESS] Output computed engines range constraints...
[STARTED] Enabling engine-strict using .npmrc...
[SKIPPED] Enabling engine-strict is disabled by default.
[STARTED] Updating package.json...
[SKIPPED] Update is disabled by default.
[SUCCESS] Computed engines range constraints:
[SUCCESS]
[SUCCESS] node * → ^14.17.0 || ^16.10.0 || >=17.0.0
[SUCCESS] npm * → >=6.0.0
[SUCCESS] yarn * → ^1.22.4
[SUCCESS]
[SUCCESS] Run nce -d -u to upgrade package.json.
```
---
## Thanks
This project is heavily inspired by the following awesome project: [npm-check-updates](https://github.com/raineorshine/npm-check-updates).
---