From 574efb2c92c38a2f578286afa8f45b093b546c0e Mon Sep 17 00:00:00 2001 From: reggi Date: Tue, 17 Sep 2024 11:03:18 -0400 Subject: [PATCH] adds devEngines --- .../cli/v10/configuring-npm/package-json.mdx | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/content/cli/v10/configuring-npm/package-json.mdx b/content/cli/v10/configuring-npm/package-json.mdx index 9a834ac8217..fadbe83c58f 100644 --- a/content/cli/v10/configuring-npm/package-json.mdx +++ b/content/cli/v10/configuring-npm/package-json.mdx @@ -905,6 +905,33 @@ Like the `os` option, you can also block architectures: The host architecture is determined by `process.arch` +### devEngines + +You can specify a `devEngines` property in your `package.json` which will run before `install`, `ci`, and `run` commands. + +The `devEngines` field aids engineers working on a codebase to all be using the same tooling. + +> Note: `engines` and `devEngines` differ in object shape. They also function very differently. `engines` is designed to alert the user when a dependency uses a differening npm or node version that the project it's being used in, whereas `devEngines` is used to alert people interacting with the source code of a project. + +The supported keys under the `devEngines` property are `cpu`, `os`, `libc`, `runtime`, and `packageManager`. Each property can be an object or an array of objects. Objects must contain `name`, and optionally can specify `version`, and `onFail`. `onFail` can be `warn`, `error`, or `ignore`, and if left undefined is of the same value as `error`. `npm` will assume that you're running with `node`. + +Here's an example of a project that will fail if the environment is not `node` and `npm`. If you set `runtime.name` or `packageManager.name` to any other string, it will fail within the npm CLI. + +```json +{ + "devEngines": { + "runtime": { + "name": "node", + "onFail": "error" + }, + "packageManager": { + "name": "npm", + "onFail": "error" + } + } +} +``` + ### private If you set `"private": true` in your package.json, then npm will refuse to publish it.