1. ホーム
  2. javascript

[解決済み] Node.jsで動作するjavascriptからNPMパッケージをインストールすることはできますか?

2023-01-09 20:28:59

質問

Node.js で実行されている javascript ファイルから NPM パッケージをインストールできますか。 例えば、あるスクリプト (これを "script.js" と呼ぶことにします) が、何らかの方法で (NPM を使用して、または使用しないで...) 通常 NPM を通じて利用可能なパッケージをインストールするようにしたいと思います。 この例では、"FFI" をインストールしたいと思います。 (npm install ffi)

解決方法は?

確かに npm をプログラムで使用することは可能であり、ドキュメントの古いリビジョンで概説されていました。これはその後、公式のドキュメントから削除されましたが、ソース管理上ではまだ以下のような記述で存在しています。

npm はプログラムで使用することができますが、その API は CLI での使用のみを意図しています。 CLI での使用のみを意図しており、他のいかなる目的への適合性も保証されていません。 他の目的への適合性は保証されません。npmを使って何らかの作業を確実に行いたい場合。 最も安全な方法は、適切な引数で目的のnpmコマンドを呼び出すことです。 を適切な引数で呼び出すことです。

npmのセマンティックバージョンは、基礎となるAPIではなく、CLIそのものを参照しています。 を参照しています。 内部APIは安定性を保つことが保証されていません。 npm のバージョンが、壊れるような変更がなされていないことを示すときでも セマンティックバージョンによると .

オリジナルのドキュメントでは、以下のようなコードサンプルが提供されていました。

var npm = require('npm')
npm.load(myConfigObject, function (er) {
  if (er) return handlError(er)
  npm.commands.install(['some', 'args'], function (er, data) {
    if (er) return commandFailed(er)
    // command succeeded, and data might have some info
  })
  npm.registry.log.on('log', function (message) { ... })
})

以降 npm node_modules フォルダにある場合は require('npm') を使って他のモジュールと同様に読み込むことができます。モジュールをインストールするために npm.commands.install() .

もしソースを見る必要があるなら、それは GitHub . 以下は、このコードの完全な動作例で、次のように実行します。 npm install をコマンドライン引数なしで実行するのと同じです。

var npm = require('npm');
npm.load(function(err) {
  // handle errors

  // install module ffi
  npm.commands.install(['ffi'], function(er, data) {
    // log errors or data
  });

  npm.on('log', function(message) {
    // log installation progress
    console.log(message);
  });
});

install 関数の最初の引数は配列であることに注意してください。配列の各要素は npm がインストールしようとするモジュールです。

より高度な使い方は npm-cli.js ファイルを参照してください。