adds devEngines

reggi committed Sep 17, 2024 at 11:03 UTC 574efb2c92c38a2f578286afa8f45b093b546c0e
1 file changed +27
content/cli/v10/configuring-npm/package-json.mdx
+27
@@ -905,6 +905,33 @@ Like the `os` option, you can also block architectures:
905
906 The host architecture is determined by `process.arch`
907
908 +### devEngines
909 +
910 +You can specify a `devEngines` property in your `package.json` which will run before `install`, `ci`, and `run` commands.
911 +
912 +The `devEngines` field aids engineers working on a codebase to all be using the same tooling.
913 +
914 +> 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.
915 +
916 +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`.
917 +
918 +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.
919 +
920 +```json
921 +{
922 + "devEngines": {
923 + "runtime": {
924 + "name": "node",
925 + "onFail": "error"
926 + },
927 + "packageManager": {
928 + "name": "npm",
929 + "onFail": "error"
930 + }
931 + }
932 +}
933 +```
934 +
935 ### private
936
937 If you set `"private": true` in your package.json, then npm will refuse to publish it.