依存関係の管理

ジェネレーターを実行すると、npm (または Yarn) および Bower を実行して、ジェネレーターに必要な追加の依存関係をインストールすることがよく求められます。

これらのタスクは非常に頻繁に発生するため、Yeoman はそれらをすでに抽象化しています。他のツールを使用してインストールを起動する方法も説明します。

Yeoman によって提供されるインストールヘルパーは、自動的に install キューの一部として、インストールが 1 回実行されるようにスケジュールすることに注意してください。インストール後に何かを実行する必要がある場合は、 end キューを使用します。

npm

npm インストールを実行するには、 this.npmInstall() を呼び出す必要があります。Yeoman は、 npm install コマンドが複数のジェネレーターによって何度も呼び出された場合でも、1 回だけ実行されることを保証します。

たとえば、lodash を開発依存関係としてインストールする場合

class extends Generator {
  installingLodash() {
    this.npmInstall(['lodash'], { 'save-dev': true });
  }
}

これと等価な呼び出しは次のとおりです。

npm install lodash --save-dev

プロジェクトのコマンドラインで。

npm 依存関係のプログラムによる管理

テンプレートを使用しない場合でも、依存関係のバージョンを固定したい場合は、 package.json ファイルをプログラムで作成または拡張できます。Yeoman のファイルシステムツールを使用すると、このジョブを実行できます。

eslint を開発依存関係として、 react を依存関係として定義する例

class extends Generator {
  writing() {
    const pkgJson = {
      devDependencies: {
        eslint: '^3.15.0'
      },
      dependencies: {
        react: '^16.2.0'
      }
    };

    // Extend or create package.json file in destination path
    this.fs.extendJSON(this.destinationPath('package.json'), pkgJson);
  }

  install() {
    this.npmInstall();
  }
};

Yarn

インストールを起動するには、 this.yarnInstall() を呼び出す必要があります。Yeoman は、 yarn install コマンドが複数のジェネレーターによって何度も呼び出された場合でも、1 回だけ実行されることを保証します。

たとえば、lodash を開発依存関係としてインストールする場合

generators.Base.extend({
  installingLodash: function() {
    this.yarnInstall(['lodash'], { 'dev': true });
  }
});

これと等価な呼び出しは次のとおりです。

yarn add lodash --dev

プロジェクトのコマンドラインで。

Bower

インストールを起動するには、 this.bowerInstall() を呼び出す必要があります。Yeoman は、 bower install コマンドが複数のジェネレーターによって何度も呼び出された場合でも、1 回だけ実行されることを保証します。

複合的な使用方法

this.installDependencies() を呼び出すと、デフォルトで npm と bower が実行されます。各パッケージマネージャーにブーリアンを渡すことで、使用するものを決めることができます。

Yarn を Bower と一緒に使用するための例

generators.Base.extend({
  install: function () {
    this.installDependencies({
      npm: false,
      bower: true,
      yarn: true
    });
  }
});

他のツールを使用する

Yeoman は、ユーザーが任意の CLI コマンドを spawn できるようにするための抽象化を提供します。この抽象化は、コマンドを正規化するため、Linux、Mac、Windows システムでシームレスに実行できます。

たとえば、PHP 愛好家で composer を実行したい場合は、次のように記述します。

class extends Generator {
  install() {
    this.spawnCommand('composer', ['install']);
  }
}

spawnCommand メソッドを install キュー内で呼び出してください。ユーザーはインストールコマンドの完了を待ちたくありません。