1. ホーム
  2. node.js

[解決済み] npmが特定のフォーマットを使用するようにpackage-lock.json lockfileVersionを修正する方法はありますか?

2022-05-11 10:17:57

質問

2人の開発者が異なるバージョンのnode (12/15) & npm (6/7)を使っている場合、そのプロジェクトではもともと package-lock.json "lockfileVersion": 1 を使用する開発者が新しいパッケージをインストールした場合、そのパッケージは package-lock.json を使用して再作成されます。 "lockfileVersion": 2 .

これは、npm v6 を使用している開発者にとって問題が発生するようです。 lockfileVersion 2 が、結局は新しい diff を生成してしまいます。

npm WARN read-shrinkwrap このバージョンのnpmはlockfileVersion@1に対応していますが、package-lock.jsonはlockfileVersion@2用に生成されました。これで頑張ってみます!

の新しいバージョンに指定する方法はありますか? npm のみ 使用 "lockfileVersion": 1 ? それとも、すべての開発者が同じバージョンの npm ?

解決方法は?

<ブロッククオート

の新しいバージョンに指定する方法はありますか? npm のみを使用するように "lockfileVersion": 1 ? それとも、すべての開発者が同じバージョンの npm ?

Node/NPMのバージョンを固定し、環境(開発、ステージング、本番)間で整合させるようアドバイスします。

を利用することができます。 nvm をプロジェクトに追加することで、ノードのバージョンを管理することができます。 .nvmrc ファイルを作成します (ソース管理に保存することを忘れないでください)。

例えば .nvmrc は次のようになります。

$ cat .nvmrc
14.15.0

とすると nvm install && nvm use を使用すると、Nodeのパインされたバージョンを使用することができます。

また、NPMは engines :

あなたのものが動作するnodeのバージョンを指定することができます。

{ "engines" : { "node" : ">=0.10.3 <0.12" } }

また、依存関係の場合と同様に、バージョンを指定しない場合(またはバージョンとして "*"を指定した場合)には、どのバージョンのNodeでもかまいません。

npm は "engines" フィールドを指定すると、そのリストのどこかに "node" があることを要求します。もし "engines" が省略された場合、npm は単に Node で動作すると仮定します。

また、"engines" フィールドを使用して、あなたのプログラムを適切にインストールできる npm のバージョンを指定することができます。例えば

{ "engines" : { "npm" : "~1.0.20" } }

ユーザーが engine-strict 設定フラグをセットしていない限り、このフィールドは勧告的なもので、あなたのパッケージが依存関係としてインストールされたときにのみ警告を生成します。

別のアプローチとして Dockerコンテナ を開発および実行のための実行環境として使用することで、NodeやNPMをインストールする必要がありません。

$ mkdir my-project
$ cd my-project
$ docker run --rm -it -v $PWD:/app --entrypoint /bin/bash --workdir /app node:14.15.0
root@4da6ee3c2ac0:/app# npm init -y
Wrote to /app/package.json:

{
  "name": "app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}


root@4da6ee3c2ac0:/app# npm install
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN [email protected] No description
npm WARN [email protected] No repository field.

up to date in 1.694s
found 0 vulnerabilities

root@4da6ee3c2ac0:/app# exit
exit
$ ls -x1
package-lock.json
package.json

見ての通り、NodeでもNPMでもない。

  1. 新しいプロジェクト用に新しいディレクトリを作成
  2. NodeとNPMが同梱されたNode Dockerコンテナをスピンアップします。
  3. 新しいプロジェクトを作成し ( npm init -y )
  4. Dockerコンテナを終了させる
  5. コンテナを起動した作業ディレクトリ内のファイルを一覧表示します。

というのは docker run のコマンドは長いので、このコマンドを利用するとよいでしょう。 ドッカーコンポーズ を使えば、より合理的なワークフローが実現できます。