1. ホーム
  2. node.js

[解決済み] Windowsでグローバルなnpmのインストール場所?

2022-05-16 12:14:45

質問

100%確実ではありませんが、自宅とオフィスの両方の PC に Windows インストーラーから node v5 をインストールしたと思っています。

私の自宅の PC では、グローバル インストールは %APPDATA% の下で行われます。

(dev) go|c:\srv> which lessc
c:\users\bjorn\appdata\roaming\npm\lessc
c:\users\bjorn\appdata\roaming\npm\lessc.cmd

を、私の会社の PC では、プログラム ファイルに入ります。

(dev) go|w:\srv> which lessc
c:\program files\nodejs\lessc
c:\program files\nodejs\lessc.cmd

PyCharmのファイルウォッチャーにこれらのグローバルツールのフルパスを提供する必要があり、プロジェクトファイルを共有しているので、ユーザフォルダ下にグローバルリソースを持たないことは理にかなっています。

なぜグローバルインストールは異なるフォルダーになるのでしょうか?

どのように解決するのですか?

によると https://docs.npmjs.com/files/folders

<ブロッククオート
  • ローカルインストール (デフォルト): 現在のパッケージルートの ./node_modules にものを置きます。
  • グローバルインストール(-g付き): /usr/localまたはnodeがインストールされている場所にものを置きます。
  • require()するのであれば、ローカルにインストールします。
  • コマンドラインで実行するのであれば、グローバルにインストールします。 -> 両方必要な場合は、両方の場所にインストールするか、npm linkを使用します。

prefixの設定

prefixの設定値は、デフォルトでnodeがインストールされている場所になります。ほとんどのシステムでは ほとんどのシステムで、これは /usr/local . Windowsでは、これは正確な node.exeのバイナリの場所です。 .

このドキュメントは少し古いかもしれませんが、なぜグローバルインストールが異なるディレクトリになるのかを説明しています。

(dev) go|c:\srv> npm config ls -l | grep prefix
; prefix = "C:\\Program Files\\nodejs" (overridden)
prefix = "C:\\Users\\bjorn\\AppData\\Roaming\\npm"

他の回答から、オーバーライドが Windows のデフォルトの場所になったように見えるかもしれませんし、このオーバーライドが実施される前に私のオフィス版をインストールした可能性があります。

これは、すべてのチーム メンバーに、自分の PC からの相対的な同じ絶対パスにグローバルが格納されるようにするための解決策、つまり (管理者として実行) も示唆しています。

(これを cmd で実行し、PowerShellでは実行しないでください!)

mkdir %PROGRAMDATA%\npm
setx PATH "%PROGRAMDATA%\npm;%PATH%" /M
npm config set prefix %PROGRAMDATA%\npm

新しい cmd.exe ウィンドウを開き、すべてのグローバル パッケージを再インストールします。

説明(by lineno.):

  1. グローバルを保持するための適切な場所にフォルダーを作成します (Microsoft は、ProgramFiles に書き込まないことを固く禁じています。 ProgramFiles に書き込まないことを固く禁じているので、%PROGRAMDATA% が次の論理的な場所と思われます。 が次の論理的な場所のようです。
  2. ディレクトリはパス上にある必要があります。 setx .. /M で設定します。 システムパス(HKEY_LOCAL_MACHINEの下)を設定します。 これは、管理者権限を持つシェルでこれを実行する必要があるものです。 これは、管理者権限を持つシェルでこれを実行する必要があるものです。
  3. 伝える npm に、この新しいパスを使うように伝えます。(注意: このシェルでは %PATH% にフォルダが表示されないので、新しいウィンドウを開く必要があります) に表示されないので、新しいウィンドウを開く必要があります)。