14

nodejsスクリプトからnpmパッケージをインストールするには?

質問は、ターミナルを介し単純なインストールnpm パッケージに関するものではなく、 nodejs スクリプトを介したインストール に関するものです:これについてで ありません: 、 contentを含むファイルを持っていることについてです。

npm install expressinstall.jsnpm install expressnode install.js

申し訳ありませんが、Google と DuckDuckGo は今日の私の友達ではありません(

主な問題は、グローバル パッケージが Windows で動作しないため、私の小さなユーティリティに必要なパッケージの自動ローカル インストールにあります。

4

2 に答える 2

6

ノードを使用してコマンドラインアプリを作成できるcommander.jsを確認してください。

execその後、モジュールを使用できます。

に以下を入れたと仮定するとinstall.js、実行するだけ./install.jsで実行npm installされます。

#!/usr/bin/env node

var program = require('commander');
var exec = require('child_process').exec;

var run = function(cmd){
  var child = exec(cmd, function (error, stdout, stderr) {
    if (stderr !== null) {
      console.log('' + stderr);
    }
    if (stdout !== null) {
      console.log('' + stdout);
    }
    if (error !== null) {
      console.log('' + error);
    }
  });
};

program
  .version('0.1.3')
  .option('i, --install ', 'install packages')
  .parse(process.argv);



if (program.install) {
  run('npm install');
}


var count = 0;


// If parameter is missing or not supported, display help
program.options.filter(function (option) {
  if(!(option.short == process.argv[2]))
    count++
});

if(count == program.options.length)
  program.help();

お役に立てれば!

于 2013-01-27T15:08:36.407 に答える
3

注:これがあなたの質問のすべての要件を満たしているとは思いません。なぜなら、最後に見つからないと述べているからですnpm...だから、おそらくあなたの質問は「npmなしでnpmパッケージをインストールする方法は?」 -うわぁ!しかし、それは「nodejs スクリプトから npm パッケージをインストールする方法は?」というタイトルに対応しています。

これを行うための別の代替手段、モジュールnpmiが示されました。これはまだ別のモジュール依存関係ですが、少なくとも* nixシェルスクリプト環境がなくてもcommander.js機能します。また、 のコードを調べてみると、コードがnpmi.js非常に短く、ノード スクリプトで直接 npm モジュールを使用しているだけであることがわかります。これは、npmi モジュールを追加したくない場合は自分で行うことができます。

したがって、私たちの場合、(Windows ユーザーをサポートするために) *nix シェル スクリプトを必要とせずにモジュールをインストールする方法が必要でした。これは法案にうまく適合します。

できなければ、それでも役に立ちませんrequire('npm')。私が考えることができる唯一のことは、おそらく絶対パスを試すことです...あなたはできますrequire('C:\Program Files\Node\packages\x)`、私は思う-またはノードのグローバルパッケージが保存されている場所(ユーザーごと?)。グローバルパッケージが実際にインストールされている場所を見つけるたびに、最初にファイルの存在をtry/catchまたはテストで数回試行し、npmモジュールを要求しようとしますか? マルウェア スキャナーにチェックを入れるかもしれません :-) が、うまくいくかもしれません。

于 2015-10-18T05:36:12.873 に答える