PowerShell UserVoice: Add Support for NPM Type Version Specification in Module Manifest and #Requires
If you have ever used Node.js, the packages.json file is used to specify the module dependencies. Here is an example:
|  |  | 
In the above snippet, line 12 specifies express module with a version string ^4.16.2. The version string here is prefixed with a caret (^) symbol. NPM supports different specification strings. We can prefix the version string with a tilde (~) as well or simply use an asterisk (*) to mean the most recent version or latest version of the module. Through the use of version range comparators, version can be specified in multiple ways. The node-semver repository provides in-depth view into this.
From the node-semver page,
A comparator is composed of an operator and a version. The set of primitive operators is:
- <Less than
- <=Less than or equal to
- >Greater than
- >=Greater than or equal to
- =Equal. If no operator is specified, then equality is assumed, so this operator is optional, but MAY be included.
For example, the comparator >=1.2.7 would match the versions 1.2.7, 1.2.8, 2.5.3, and 1.3.9, but not the versions 1.2.6 or 1.1.0.
The tilde (~) and caret (^) ranges can be used as well.
X-Ranges 1.2.x 1.X 1.2.* *
Any of X, x, or * may be used to “stand in” for one of the numeric values in the [major, minor, patch] tuple.
- *:=- >=0.0.0(Any version satisfies)
- 1.x:=- >=1.0.0 <2.0.0(Matching major version)
- 1.2.x:=- >=1.2.0 <1.3.0(Matching major and minor versions)
Tilde Ranges ~1.2.3 ~1.2 ~1
Allows patch-level changes if a minor version is specified on the comparator. Allows minor-level changes if not.
Caret Ranges ^1.2.3 ^0.2.5 ^0.0.4
Allows changes that do not modify the left-most non-zero digit in the [major, minor, patch] tuple. In other words, this allows patch and minor updates for versions 1.0.0 and above, patch updates for versions 0.X >=0.1.0, and no updates for versions 0.0.X.
PowerShell UserVoice
Coming to the subject of this article, having similar support in PowerShell module manifests and with #Requires statement, we can specify the module dependencies in a more flexible way. To this extent, I have created a UserVoice item: https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/32845762-support-for-npm-type-version-strings-in-powershell
If you think this is useful feature in PowerShell, go ahead and vote it up!
Share on: