-
📦 Get the latest version for your package (from npm)
-
🌐 Great for global installation packages
-g
-
✌️ Semantic versions
-
0️⃣ Zero dependencies
-
🚀 Small and fast (~ 1 kbytes)
Installation - Usage - Return Types - Options - Examples
npm i nanov
or
yarn add nanov
const { getVersion } = require("nanov"); // node < 12 (commonjs)
import { getVersion } = from "nanov"; // node 14+ ( using in a .mjs file or setting "type":"module" inside your package.json) // or using a compatible module option in tsconfig for esm
//cjs (node <12)
const { getVersion } = require("nanov");
/* take your current version */
const currentVersion = require("./package.json").version;
//esm (node 14+)
import { getVersion } from "nanov";
/* take your current version */
import fs from "fs";
const currentVersion = JSON.parse(fs.readFileSync("./package.json")).version;
ℹ️ you must provide your current running version
package name: optionally take your package name from package.json / or write as a string
const packageName = require('./package.json').name;
getVersion("my-package-name", currentVersion)
.then(({isMajor, isMinor, isPatch, latestVersion})=> {
if(isMajor || isMinor || isPatch,)
console.log('new version available: ', latestVersion)
})
//further code ....
const { isMajor, isMinor, isPatch, latestVersion } = await getVersion(
"my-package",
currentVersion
);
if (isMajor || isMinor || isPatch)
console.log("new version available: ", latestVersion);
//further code ....
// if the latest version is the current version: will result in:
false (boolean)
// if the latest version is greater than the current version
{
isMajor: boolean, // 1.0.0 > 0.0.0
isMinor: boolean, // 0.1.0 > 0.0.0
isPatch: boolean, // 0.0.1 > 0.0.0
latestVersion: string,
packageName: string
}: object
// if hit the cache will skip the http request and return empty object
{} (empty object)
// latest / current
isMajor: true, // 2.0.0 > 1.0.0 // x - -
//
isMinor: true, // 2.1.0 > 1.0.0 // - x -
isPatch: true, // 2.0.1 > 1.0.0 // - - x
getVersion(packageName: string , currentVersion: string , options: object)
//options
{
cache: true, // should use caching strategy / true by default (boolean)
cacheTime: 24, // by default 24 hours (number)
}
the cache path is OS-temp-folder / nanov /packageName@currentVersion.cache.json
Simple
getVersion("my-package", version).then(({ latestVersion }) => {
if (latestVersion) console.log("new version available: ", latestVersion);
});
Typescript
const { latestVersion } = (await getVersion('my-package', currentVersion)) as Result;
if (latestVersion) console.log('new version available'),
Catch
always catch errors if you want to prevent your program from stopping (for possible errors related with getVersion)
getVersion("my-package", version)
.then(({ latestVersion }) => {
if (latestVersion)
console.log("new version available: ", latestVersion);
})
.catch((err) => {
console.log(err);
});
No cache (will do http request everytime)
not recommended
getVersion(packageName, currentVersion, {
cache: false,
}).then((res, latestVersion) => {
if (res) console.log("new version available: ", latestVersion);
});
Use cache for 1 hour
getVersion(packageName, currentVersion, {
cacheTime: 1,
}).then(({ latestVersion }) => {
if (latestVersion) console.log("new version available: ", latestVersion);
});
Any (Async / await)
const { isMajor, isMinor, isPatch, latestVersion } = await getVersion(
"my-package",
version
);
if (isMajor || isMinor || isPatch)
console.log("new version available: ", latestVersion);
Major only
getVersion("my-package", currentVersion).then(({ isMajor, latestVersion }) => {
if (isMajor) console.log("new major version available: ", latestVersion);
});
Minor only
getVersion("my-package", currentVersion).then(({ isMinor, latestVersion }) => {
if (isMinor) console.log("new minor version available: ", latestVersion);
});
Patch only
getVersion("my-package", currentVersion).then(({ isPatch, latestVersion }) => {
if (isPatch) console.log("new patch version available: ", latestVersion);
});
Basically you can do anything
getVersion("my-package", currentVersion).then(
({ isMinor, latestVersion, packageName }) => {
if (isMinor) {
console.log("new version available: ", latestVersion);
console.log(`run: npm i -g ${packageName} to update`);
//further functions
}
}
);
Automatic deprecation (when new major version)
not recommended
getVersion("my-package", currentVersion).then(
({ isMajor, latestVersion, packageName }) => {
if (isMajor) {
console.log("this version is deprecated");
console.log("latest version is required: ", latestVersion);
console.log(`run: npm i -g ${packageName} to update`);
process.exit(); // quit your program from running
}
}
);