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"
insidepackage.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, thepackage.json
dependency will have to refer to the exact version like the following:
"dependencies": {
"iotivity-node": "1.2.0-3"
}