To publish N-API version of a package alongside a non-N-API version
The following steps are illustrated using the package iotivity-node:
- First, publish the non-N-API version:
- Update the version in
package.json. Foriotivity-node, the version becomes1.2.0-2. - Go through the release checklist (ensure tests/demos/docs are OK)
npm publish
- Update the version in
- Then, publish the N-API version:
- Update the version in
package.json. In the case ofiotivity-node, the version becomes1.2.0-3. For versioning, we recommend following the pre-release version scheme as described by semver.org e.g.1.2.0-napi. - Go through the release checklist (ensure tests/demos/docs are OK)
npm publish --tag n-api
- Update the version in
In this example, tagging the release with n-api has ensured that, although
version 1.2.0-3 is later than the non-N-API published version (1.2.0-2), it
will not be installed if someone chooses to install iotivity-node by simply
running npm install iotivity-node. This will install the non-N-API version
by default. The user will have to run npm install iotivity-node@n-api to
receive the N-API version. For more information on using tags with npm check
out "Using dist-tags".
To introduce a dependency on an N-API version of a package
To add the N-API version of iotivity-node as a dependency, the package.json
will look like this:
"dependencies": {
"iotivity-node": "n-api"
}
As explained in
"Using dist-tags", unlike regular versions, tagged versions cannot be
addressed by version ranges such as "^2.0.0" inside package.json. The
reason for this is that the tag refers to exactly one version. So, if the
package maintainer chooses to tag a later version of the package using the
same tag, npm update will receive the later version. This should be acceptable
given the currently experimental nature of N-API. To depend on an N-API-enabled
version other than the latest published, the package.json dependency will
have to refer to the exact version like the following:
"dependencies": {
"iotivity-node": "1.2.0-3"
}