Node.js で実行されている JavaScript ファイルから NPM パッケージをインストールできますか? たとえば、スクリプトが必要です。「script.js」と呼びましょう。これは、何らかの方法で (...NPM を使用するかどうかに関係なく...)、通常は NPM から入手できるパッケージをインストールします。この例では、「FFI」をインストールします。(npm インストール ffi)
10 に答える
プログラムで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
、ソース管理のファイルにあります。
はい。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);
}
});