1

OSX/*nix では、~/.npmディレクトリに npm キャッシュが保持されており、次のように構成されているようです。

foo/
  0.1.2/
  1.0.01/
  1.3.34/
  2.0.1/
bar/
  0.3.8/
  2.1.1/
baz/
  3.2.1/
  4.1.7/

このディレクトリからモジュール ディレクトリを要求できるかどうか疑問に思っています。これはNPMの哲学に完全に反していると確信していますが、最も簡単な方法は何でしょうか。

~/.npm ディレクトリを使用するように NODE_PATH を変更する可能性があると思いますが、 ~/.npm ディレクトリの構造が異なるようです。それでrequire()機能するかどうかはわかりません。

Yarn改善しようとしているような新しいパッケージ マネージャーが表示されNPMます。私の意見では、NPM が .npm キャッシュを使用して依存関係を参照するだけではない理由 (なぜそれらをプロジェクト ディレクトリでローカルに書き換えるのですか?) について、私はまだ混乱していますが、誰かがそれに対処できるかもしれません。

私の最終目標は、Babel、Istanbul のような巨大な依存関係をディスク上の 1 つの場所に取得し、その場所をどこでも (少なくとも同じユーザーに対して) 参照する方法を見つけることです。NVM などのツールを使用すると、グローバル モジュールの場所 (npm root -g) が変更されるため、$HOME ディレクトリ内の何かを使用するのが最善です。.npm キャッシュが既にそこにあるため、可能性があります。

~/.npm ディレクトリで動作するように NODE_PATH を操作する以外に (試してみたところ ~/.npm のディレクトリ構造がこれを妨げているようです)、別の解決策として npm をプログラムで使用することがあります。

このようなもの:

const npm = require('npm');
npm.load({
    loaded: false
}, function (err) {
  // catch errors
  npm.commands.install(['babel','istanbul'], function (er, data) {
    // log the error or data
  });
  npm.on('log', function (message) {
    // log the progress of the installation
    console.log(message);
  });
});
4

1 に答える 1