Node.jsでnpmを使ってパッケージをバージョンを指定してインストールした時に、インストールしたパッケージに含まれるパッケージのバージョンを古いバージョンに指定したい

実現したいこと

「JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック」という2015年の本を読んでいるのですが、VMwareにCentOSをインストールしてCenOSにNode.jsをインストールしました。
インストールしたNode.jsは書籍の説明に合わせてバージョン0.12.4をインストールしました。

Node.jsのモジュールのインストールにnpmを使って、

npm install パッケージ名

の形式でモジュールをインストールしています。

書籍を読み進めていくとモジュールのインストールの指示がよく出てくるのですが、書籍が発行された2015年に合わせて古いモジュールをインストールするために

npm install パッケージ名@バージョン

の形式でバージョンを指定して2015年頃のバージョンのモジュールをインストールしています。
例えば、モジュール「request」をインストールする場合、
npmのrequestのバージョン一覧(リンク先でshow deprecated versionsのチェックボックスにチェックを入れるとバージョンの一覧が表示される)
で2015年頃のバージョンは2.67.0なので

npm install request@2.67.0

とコマンドを入力してrequestモジュールをインストールします。
npm list
でインストールされたモジュールの階層構造を表示すると

├─┬ request@2.67.0
│ ├── aws-sign2@0.6.0
│ ├─┬ bl@1.0.3
│ │ └─┬ readable-stream@2.0.6
│ │ ├── core-util-is@1.0.3
│ │ ├── inherits@2.0.4
│ │ ├── isarray@1.0.0
│ │ ├── process-nextick-args@1.0.7
│ │ ├── string_decoder@0.10.31
│ │ └── util-deprecate@1.0.2
│ ├── caseless@0.11.0
│ ├─┬ combined-stream@1.0.8
│ │ └── delayed-stream@1.0.0
│ ├── extend@3.0.2
│ ├── forever-agent@0.6.1
│ ├─┬ form-data@1.0.1
│ │ └─┬ async@2.6.4
│ │ └── lodash@4.17.21
│ ├─┬ har-validator@2.0.6
│ │ ├─┬ chalk@1.1.3
│ │ │ ├── ansi-styles@2.2.1
│ │ │ ├── escape-string-regexp@1.0.5
│ │ │ ├─┬ has-ansi@2.0.0
│ │ │ │ └── ansi-regex@2.1.1
│ │ │ ├─┬ strip-ansi@3.0.1
│ │ │ │ └── ansi-regex@2.1.1
│ │ │ └── supports-color@2.0.0
│ │ ├── commander@2.20.3
│ │ ├─┬ is-my-json-valid@2.20.6
│ │ │ ├─┬ generate-function@2.3.1
│ │ │ │ └── is-property@1.0.2
│ │ │ ├─┬ generate-object-property@1.2.0
│ │ │ │ └── is-property@1.0.2
│ │ │ ├── is-my-ip-valid@1.0.1
│ │ │ ├── jsonpointer@5.0.1  ←例えばこれは最新のバージョンがインストールされてる。
│ │ │ └── xtend@4.0.2
│ │ └─┬ pinkie-promise@2.0.1
│ │ └── pinkie@2.0.4
│ ├─┬ hawk@3.1.3
│ │ ├── boom@2.10.1
│ │ ├── cryptiles@2.0.5
│ │ ├── hoek@2.16.3
│ │ └── sntp@1.0.9
│ ├─┬ http-signature@1.1.1
│ │ ├── assert-plus@0.2.0
│ │ ├─┬ jsprim@1.4.2
│ │ │ ├── assert-plus@1.0.0
│ │ │ ├── extsprintf@1.3.0
│ │ │ ├── json-schema@0.4.0
│ │ │ └─┬ verror@1.10.0
│ │ │ └── core-util-is@1.0.2
│ │ └─┬ sshpk@1.18.0
│ │ ├── asn1@0.2.6
│ │ ├── assert-plus@1.0.0
│ │ ├── bcrypt-pbkdf@1.0.2
│ │ ├── dashdash@1.14.1
│ │ ├── ecc-jsbn@0.1.2
│ │ ├── getpass@0.1.7
│ │ ├── jsbn@0.1.1
│ │ ├── safer-buffer@2.1.2
│ │ └── tweetnacl@0.14.5
│ ├── is-typedarray@1.0.0
│ ├── isstream@0.1.2
│ ├── json-stringify-safe@5.0.1
│ ├─┬ mime-types@2.1.35
│ │ └── mime-db@1.52.0
│ ├── node-uuid@1.4.8
│ ├── oauth-sign@0.8.2
│ ├── qs@5.2.1
│ ├── stringstream@0.0.6
│ ├── tough-cookie@2.2.2
│ └── tunnel-agent@0.4.3
└─┬ xml2js@0.4.17
├── sax@1.3.0
└─┬ xmlbuilder@4.2.1
└── lodash@4.17.21

のように表示されます。
以前、書籍のあるプログラムを動かしたときにjsonpointer.jsでエラーが発生したっぽそうなエラーメッセージが表示されました。その時に、モジュールjsonpointerの古いバージョンを個別にダウンロードして、ダウンロードしたjsonpointerのフォルダをモジュールrequestの中にあるjsonpointerのフォルダと差し替えました。そしたらエラーが出ずにプログラムが動いたので、恐らくモジュールrequestのバージョンが古いのに、その中に含まれているjsonpointerのバージョンが最新で、バージョンの相性が不一致なのでエラーが出たのではないかと推測しました。

古いバージョンのモジュールをインストールしても、そのモジュールに含まれる別のモジュールは最新であったりします。
そこで質問なのですが、

1.インストールされたあるモジュールに含まれる別のモジュールだけをバージョンを指定してダウングレードする方法。
2.バージョンを指定してモジュールをインストールする時に、含まれるモジュールも、全部古いバージョンにする方法。

上記2点を知りたくて質問しました。よろしくお願いいたします。

発生している問題・分からないこと

npm install モジュール名@バージョン
でバージョンを指定してモジュールをインストールする時に、そのモジュールに含まれる別のモジュールのバージョンを指定してインストールする方法が分からない。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

バージョンを指定してモジュールをインストールする説明はあったが、モジュールに含まれるモジュールのバージョンを指定する方法は説明が見つからなかった。

補足

OS:VMwareにインストールしたCentOS7
Node.jsのバージョン:0.12.4

コメントを投稿

0 コメント