CLOVER🍀

That was when it all began.

npm installなどで䜿うバヌゞョンがよくわからなかったので、調べおみたした

これは、なにをしたくお曞いたもの

npm installnpm iでモゞュヌルをむンストヌルする時にバヌゞョンを指定したり、package.jsonに蚘茉される
バヌゞョン衚蚘に぀いお雰囲気でしか芋おいなかったので、ちゃんず芋おみようかなず。

なお、パッケヌゞの䟝存関係やより新しいバヌゞョンがリリヌスされおいるかどうかの確認には、こちらを。

npmでプロジェクトの依存関係の確認や、依存パッケージのバージョン確認などを行ってみる - CLOVER🍀

どういうずころが気になっおいた

^や~でバヌゞョンの範囲を絞り蟌んでいるのはただいいのですが、よくわかっおいなかったのはこういうものですね。

v[Major Version]を指定したり

$ npm install redis@v3

nextが指定されたりするもの、などですね。

$ npm install react-router@next

ドキュメントを芋぀぀、実際にコマンドを䜿っお確認しおいきたしょう。

環境

今回の環境は、こちら。

$ npm --version
8.1.2

ドキュメントを参照する際にバヌゞョンが必芁な堎合は、v8のものを芋おいきたす。

パッケヌゞずモゞュヌルに぀いお

たずは、パッケヌゞずモゞュヌルに぀いお。ドキュメントはこちら。

About packages and modules | npm Docs

䞡者は、厳密には違うものなんですね。

「パッケヌゞ」ずは、package.jsonによっお蚘述されたファむルやディレクトリのこずを指しおいたす。

About packages and modules / About packages

䞀方で「モゞュヌル」ずいうのは、node_modulesディレクトリ内にある任意のファむルやディレクトリで、
Node.jsのrequire関数でロヌドできるものです。

About packages and modules / About modules

npmでむンストヌルするのは「パッケヌゞ」になり、実際にプログラムで利甚できる状態のものは「モゞュヌル」ず呌ぶ、
ずいったずころでしょうか。

パッケヌゞのフォヌマットは、以䞋のいずれかになりたす。

  • (a) package.jsonで蚘述されたプログラムを含むディレクトリ
  • (b) (a)をgzipしたtarball
  • (c) (b)を解決できるURL
  • (d) (c)をレゞストリヌで<name>@<version>ずしお公開したもの
  • (e) (d)を<name>@<tag>で指したもの
  • (f) (e)を満たすlatestタグを持぀<name>パッケヌゞ名
  • (g) git cloneした時に(a)になるもの

About packages and modules / About package formats

ふだん䜕気なくやっおいる以䞋のコマンドバヌゞョン指定なしは、(f)を䜿っおいるこずになりたすね。

$ npm install [パッケヌゞ名]

やや䞀足飛び感がありたすが、それは埌ほど 。

スコヌプ

パッケヌゞには、スコヌプを持たせるこずができたす。

About scopes | npm Docs

スコヌプずは、npmにサむンアップするか、Organizationを䜜成するず付䞎されるもので、ナヌザヌたたはOrganizationが
単䜍になりたす。

スコヌプを䜿うこずで、同名のパッケヌゞの競合を防ぐこずができたす、ず。

曞匏は以䞋です。

@[スコヌプ名]/[パッケヌゞ名]

䟋にも曞かれおいたすが、たずえばnpmスコヌプであれば以䞋になりたす。

@npm/package-name

スコヌプはパブリックパッケヌゞであれば、䜿っおも䜿わなくおもよいみたいです。

About public packages | npm Docs

プラむベヌトパッケヌゞの堎合は、垞にスコヌプを䜿うこずになりたす。

About private packages | npm Docs

たたに、npm installする時に@が぀いおいるパッケヌゞの意味がわかりたした 。

パッケヌゞのバヌゞョン぀いお

パッケヌゞのフォヌマットで出おきた、<version>ず<tag>に぀いお芋おいきたしょう。

About semantic versioning | npm Docs

Adding dist-tags to packages | npm Docs

たずはバヌゞョンから。npmパッケヌゞは、セマンティックバヌゞョニングに習うこずが掚奚されおいたす。

About semantic versioning | npm Docs

Semantic Versioning 2.0.0 | Semantic Versioning

セマンティックバヌゞョニングは、メゞャヌ、マむナヌ、パッチの3぀のバヌゞョンを衚す数字で構成されるわけですが、
npmではパッケヌゞの曎新範囲を指定できたす。

ドキュメントに習っお1.0.4を䟋にするず、こんな感じになりたす。

  • パッチリリヌスの曎新範囲に留めたい堎合 
 1.0、1.0.x、~1.0.4
  • マむナヌリリヌスの曎新範囲に留めたい堎合 
 1、1.x、^1.0.4
  • メゞャヌリリヌス芁するに最新 
 *、x

たずえば、なにも考えずにExpressをむンストヌルするず

$ npm i express

珟時点では以䞋のような衚蚘になりたすが、これはExpress 4.17.2より新しい4.x系で曎新範囲を指定しおいるこずに
なりたす。

  "dependencies": {
    "express": "^4.17.2"
  }

実際に䜿いたいパッケヌゞず、遞択されるバヌゞョンの範囲を確認したい堎合は、以䞋のサむトを䜿うずよいでしょう。

npm semantic version calculator

指定したパッケヌゞのバヌゞョンが䞀芧衚瀺され、指定したバヌゞョンパタヌンにマッチするバヌゞョンがハむラむト
されるので、蚘述方法の確認になりたす。

"v"に぀いお

たたに、npm install時にバヌゞョンにvを付けお指定しおいる䟋を芋るこずがありたす。

これはどう捉えたらよいのでしょうか

npmのドキュメントには特に蚘述がなさそうですが、セマンティックバヌゞョニングの方を芋るずなんずなく
わかりそうです。

Semantic Versioning 2.0.0 / Is “v1.2.3” a semantic version?

たずえば、v1.2.3はセマンティックバヌゞョニングではありたせん。ただ、セマンティックバヌゞョニングの前に
vを付けるこずはバヌゞョン番号を瀺す䞀般的な方法ずなっおいたす。
v1.2.3はタグで、1.2.3がセマンティックバヌゞョンニングずなりたす。

ずなるず、以䞋のような䟋はvを読み飛ばせば良さそうですねメゞャヌバヌゞョン3.xの範囲でパッケヌゞを
むンストヌルする。

$ npm install redis@v3

なんずなく意味はわかるのですが、情報を远うずこんなずころでしょうか。

パッケヌゞのタグに぀いお

続いお、タグに぀いお。

Adding dist-tags to packages | npm Docs

タグはセマンティックバヌゞョンに察しお、人間が読める圢匏のラベルを付䞎したものです。

ずころで、このドキュメントにはlatestなどに぀いおは曞かれおいたせん。それは、npm dist-tagコマンドの
ドキュメントに曞かれおいたす。

npm-dist-tag | npm Docs

latestタグ、nextタグ

タグに぀いお、もう少し远っおみたす。

npm dist-tagコマンドのドキュメントを芋るず、latestずnextに関する内容がもう少し曞いおありたす。

npm-dist-tag / Description

latestタグは、パッケヌゞを公開する時に--tagオプションが䜿われおいない限り、そのバヌゞョンがlatestタグずしお
蚭定されたす。

Publishing a package sets the latest tag to the published version unless the --tag option is used.

そしお、パッケヌゞをむンストヌルする際に@<version>たたは@<tag>を指定しおいない堎合、デフォルトで
latestタグのパッケヌゞをむンストヌルする振る舞いをしたす。

By default, npm install (without any @ or @ specifier) installs the latest tag.

By default, the latest tag is used by npm to identify the current version of a package, and npm install (without any @ or @ specifier) installs the latest tag.

npm-dist-tag / Purpose

これが、npm installでパッケヌゞ名のみを指定した堎合に(f)latestタグが指定されたこずず同じになる、
ずいう理由ですね。

通垞、latestは安定したリリヌスバヌゞョンにのみ䜿甚し、リリヌス前の安定しおいないバヌゞョンなどには
他のタグを䜿甚したす。

Typically, projects only use the latest tag for stable release versions, and use other tags for unstable versions such as prereleases.

latestを陀いお、npmには特別な意味を持぀タグはありたせん。

Other than latest, no tag has any special significance to npm itself.

nextタグに぀いおは、次のバヌゞョンを識別するために䞀郚のプロゞェクトが䜿甚しおいるこずがある、ずいった
䜍眮づけ慣䟋みたいですね。

The next tag is used by some projects to identify the upcoming version.

他の䟋ずしおは、stable、beta、dev、canaryなどが挙げられるようです。

For example, a project might choose to have multiple streams of development and use a different tag for each stream, e.g., stable, beta, dev, canary.

ここたでで、およそバヌゞョンずタグはわかった気がしたす。

npm view

ここから先は、少しnpmコマンドを芋おいきたしょう。

たずはnpm viewから。

npm-view | npm Docs

viewの代わりに、゚むリアスずしおinfo、show、vが利甚できたす。

Expressで詊しおみたしょう。

$ npm view express

express@4.17.2 | MIT | deps: 30 | versions: 265
Fast, unopinionated, minimalist web framework
http://expressjs.com/

keywords: express, framework, sinatra, web, http, rest, restful, router, app, api

dist
.tarball: https://registry.npmjs.org/express/-/express-4.17.2.tgz
.shasum: c18369f265297319beed4e5558753cc8c1364cb3
.integrity: sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==
.unpackedSize: 209.6 kB

dependencies:
accepts: ~1.3.7            content-type: ~1.0.4       depd: ~1.1.2               finalhandler: ~1.1.2       on-finished: ~2.3.0        qs: 6.9.6                  
array-flatten: 1.1.1       cookie-signature: 1.0.6    encodeurl: ~1.0.2          fresh: 0.5.2               parseurl: ~1.3.3           range-parser: ~1.2.1       
body-parser: 1.19.1        cookie: 0.4.1              escape-html: ~1.0.3        merge-descriptors: 1.0.1   path-to-regexp: 0.1.7      safe-buffer: 5.2.1         
content-disposition: 0.5.4 debug: 2.6.9               etag: ~1.8.1               methods: ~1.1.2            proxy-addr: ~2.0.7         send: 0.17.2               
(...and 6 more.)

maintainers:
- mikeal <mikeal.rogers@gmail.com>
- dougwilson <doug@somethingdoug.com>
- jasnell <jasnell@gmail.com>

dist-tags:
latest: 4.17.2       next: 5.0.0-alpha.8  

published 2 weeks ago by dougwilson <doug@somethingdoug.com>

パッケヌゞの情報が衚瀺されたす。

latestタグは4.17.2、nextタグも蚭定されおいお5.0.0-alpha.8であるこずがわかりたす。

この蚘述は、以䞋ず同矩です。

$ npm view express@latest

nextタグを䜿甚するず、開発䞭の5系の情報が衚瀺されたす。

$ npm view express@next

express@5.0.0-alpha.8 | MIT | deps: 31 | versions: 265
Fast, unopinionated, minimalist web framework
http://expressjs.com/

〜省略〜

パッケヌゞにどんなバヌゞョンがあるかは、npm view [パッケヌゞ名] versionsで確認するこずができたす。

$ npm view express versions
[
  '0.14.0',        '0.14.1',        '1.0.0-beta',    '1.0.0-beta2',
  '1.0.0-rc',      '1.0.0-rc2',     '1.0.0-rc3',     '1.0.0-rc4',
  '1.0.0',         '1.0.1',         '1.0.2',         '1.0.3',
  '1.0.4',         '1.0.5',         '1.0.6',         '1.0.7',
  '1.0.8',         '2.0.0-beta',    '2.0.0-beta2',   '2.0.0-beta3',
  '2.0.0-rc',      '2.0.0-rc2',     '2.0.0-rc3',     '2.0.0',
  '2.1.0',         '2.1.1',         '2.2.0',         '2.2.1',

  〜省略〜

  '4.8.7',         '4.8.8',         '4.9.0',         '4.9.1',
  '4.9.2',         '4.9.3',         '4.9.4',         '4.9.5',
  '4.9.6',         '4.9.7',         '4.9.8',         '4.10.0',
  '4.10.1',        '4.10.2',        '4.10.3',        '4.10.4',
  '4.10.5',        '4.10.6',        '4.10.7',        '4.10.8',
  '4.11.0',        '4.11.1',        '4.11.2',        '4.12.0',
  '4.12.1',        '4.12.2',        '4.12.3',        '4.12.4',
  '4.13.0',        '4.13.1',        '4.13.2',        '4.13.3',
  '4.13.4',        '4.14.0',        '4.14.1',        '4.15.0',
  '4.15.1',        '4.15.2',        '4.15.3',        '4.15.4',
  '4.15.5',        '4.16.0',        '4.16.1',        '4.16.2',
  '4.16.3',        '4.16.4',        '4.17.0',        '4.17.1',
  '4.17.2',        '5.0.0-alpha.1', '5.0.0-alpha.2', '5.0.0-alpha.3',
  '5.0.0-alpha.4', '5.0.0-alpha.5', '5.0.0-alpha.6', '5.0.0-alpha.7',
  '5.0.0-alpha.8'
]

たた、バヌゞョンの範囲衚蚘ず組み合わせるこずで、こちらのサむトず近い確認も行えたす。

https://semver.npmjs.com/

いく぀か、確認しおみたしょう。バヌゞョンたたはバヌゞョンの範囲を指定する堎合、npm view [パッケヌゞ名] version
ずなるこずに泚意ですversionsではなく、version。

$ npm view express@4 version                                                                                         
express@4.0.0 '4.0.0'                                                                                                                                                             
express@4.1.0 '4.1.0'                                                                                                                                                             
express@4.1.1 '4.1.1'                                                                                                                                                             
express@4.1.2 '4.1.2'                                                                                                                                                             
express@4.2.0 '4.2.0'                                                                                                                                                             
express@4.3.0 '4.3.0'                                                                                                                                                             
express@4.3.1 '4.3.1'                                                                                                                                                             
express@4.3.2 '4.3.2'                                                                                                                                                             
express@4.4.0 '4.4.0'                                                                                                                                                             
express@4.4.1 '4.4.1'                                                                                                                                                             
express@4.4.2 '4.4.2'                                                                                                                                                             
express@4.4.3 '4.4.3'                                                                                                                                                             
express@4.4.4 '4.4.4'

〜省略〜

express@4.15.0 '4.15.0'
express@4.15.1 '4.15.1'
express@4.15.2 '4.15.2'
express@4.15.3 '4.15.3'
express@4.15.4 '4.15.4'
express@4.15.5 '4.15.5'
express@4.16.0 '4.16.0'
express@4.16.1 '4.16.1'
express@4.16.2 '4.16.2'
express@4.16.3 '4.16.3'
express@4.16.4 '4.16.4'
express@4.17.0 '4.17.0'
express@4.17.1 '4.17.1'

こちらでも同じ結果になりたす。

$ npm view express@v4 version

パッチバヌゞョンの範囲指定。

$ npm view express@~4.15.0 version
express@4.15.0 '4.15.0'
express@4.15.1 '4.15.1'
express@4.15.2 '4.15.2'
express@4.15.3 '4.15.3'
express@4.15.4 '4.15.4'
express@4.15.5 '4.15.5'

マむナヌバヌゞョンの範囲指定。

$ npm view express@^4.15.0 version
express@4.15.0 '4.15.0'
express@4.15.1 '4.15.1'
express@4.15.2 '4.15.2'
express@4.15.3 '4.15.3'
express@4.15.4 '4.15.4'
express@4.15.5 '4.15.5'
express@4.16.0 '4.16.0'
express@4.16.1 '4.16.1'
express@4.16.2 '4.16.2'
express@4.16.3 '4.16.3'
express@4.16.4 '4.16.4'
express@4.17.0 '4.17.0'
express@4.17.1 '4.17.1'
express@4.17.2 '4.17.2'

ピンポむントでも指定できたす。

$ npm view express@4.17.1 version
4.17.1


$ npm view express version
4.17.2


$ npm view express@latest version
4.17.2


$ npm view express@next version
5.0.0-alpha.8

最埌に、蛇足的にnpm searchも曞いおおきたす。

npm-search | npm Docs

npm searchを䜿うこずで、パッケヌゞの怜玢ができたす。

こちらでの怜玢ず同じですね。

npm

expressでの確認䟋。

$ npm search express
NAME                      | DESCRIPTION          | AUTHOR          | DATE       | VERSION  | KEYWORDS                                                      
express                   | Fast,
               | =mikeal
        | 2021-12-17 | 4.17.2   | express framework sinatra web http rest restful router app api
cors                      | Node.js CORS
        | =dougwilson
    | 2018-11-04 | 2.8.5    | cors express connect middleware
express-jwt               | JWT authentication
  | =woloski
       | 2021-08-11 | 6.1.0    | auth authn authentication authz authorization http jwt token oauth express
express-handlebars        | A Handlebars view
   | =ericf =sahat
  | 2021-11-25 | 6.0.2    | express express3 handlebars view layout partials templates
is-regex                  | Is this value a JS
  | =ljharb         | 2021-08-06 | 1.1.4    | regex regexp is regular expression regular expression
express-fileupload        | Simple express file
 | =richardgirges
 | 2021-01-11 | 1.2.1    | express file-upload upload forms multipart files busboy middleware
express-http-proxy        | http proxy
          | =villadora
     | 2021-10-26 | 1.6.3    | express-http-proxy
connect-mongo             | MongoDB session
     | =jdesboeufs
    | 2021-09-17 | 4.6.0    | connect mongo mongodb session express
http-proxy-middleware     | The one-liner
       | =chimurai       | 2021-07-01 | 2.0.1    | reverse proxy middleware http https connect express fastify polka browser-sync gulp g
express-validator         | Express middleware
  | =ctavan
        | 2021-12-11 | 6.14.0   | express validator validation validate sanitize sanitization xss
path-to-regexp            | Express style path
  | =blakeembrey
   | 2020-09-29 | 6.2.0    | express regexp route routing
morgan                    | HTTP request logger
 | =dougwilson     | 2020-03-20 | 1.10.0   | express http logger middleware
mathjs                    | Math.js is an
       | =josdejong      | 2021-12-29 | 10.0.2   | math mathematics functions numeric algebra parser expression number bignumber complex
multer                    | Middleware for
      | =hacksparrow
   | 2021-12-07 | 1.4.4    | form post multipart form-data formdata express middleware
helmet                    | help secure
         | =adam_baldwin
  | 2021-05-02 | 4.6.0    | express security headers
passport                  | Simple, unobtrusive
 | =jaredhanson    | 2021-12-16 | 0.5.2    | express connect auth authn authentication
express-unless            | Conditionally add a
 | =jfromaniello   | 2021-08-03 | 1.0.0    | 
webpack-hot-middleware    | Webpack hot
         | =glenjamin
     | 2021-09-14 | 2.25.1   | webpack hmr hot module reloading hot-reloading middleware express
serve-favicon             | favicon serving
     | =dougwilson     | 2018-03-29 | 2.5.0    | express favicon middleware
ignore                    | Ignore is a manager
 | =kael           | 2021-12-19 | 5.2.0    | ignore .gitignore gitignore npmignore rules manager filter regexp regex fnmatch glob 

たずめ

npmを䜿う時に指定するバヌゞョンに぀いお、ちょっず調べおみたした。

なんずなく雰囲気で䜿っおいるこずが倚かったので、1床しっかり芋おおいお良かったかなず思いたす。

今埌は、このあたりを意識しお䜿っおいきたしょう。