101

Node.js で実行されている JavaScript ファイルから NPM パッケージをインストールできますか? たとえば、スクリプトが必要です。「script.js」と呼びましょう。これは、何らかの方法で (...NPM を使用するかどうかに関係なく...)、通常は NPM から入手できるパッケージをインストールします。この例では、「FFI」をインストールします。(npm インストール ffi)

4

10 に答える 10

122

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

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

npm のセマンティック バージョンは、基礎となる API ではなく、CLI 自体を参照します。npm のバージョンが semver に従って重大な変更が行われていないことを示している場合でも、内部 API が安定しているとは限りません

元のドキュメントでは、次のコード サンプルが提供されていました。

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) { ... })
})

npmnode_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、ソース管理のファイルにあります。

于 2013-04-11T19:48:14.127 に答える
29

はい。child_process を使用してシステムコマンドを実行できます

var exec = require('child_process').exec,
    child;

 child = exec('npm install ffi',
 function (error, stdout, stderr) {
     console.log('stdout: ' + stdout);
     console.log('stderr: ' + stderr);
     if (error !== null) {
          console.log('exec error: ' + error);
     }
 });
于 2013-04-11T19:48:43.143 に答える