管理相依性

在執行產生器之後,你通常需要執行 npm(或 Yarn)和 Bower,以安裝任何你產生器所需的相依性。

由於這些任務的執行頻率極高,因此 Yeoman 已經抽象化這些任務。我們也會介紹如何透過其他工具啟動安裝。

請注意,Yeoman 所提供的安裝輔助程式會自動將安裝排程在 install佇列中執行一次。如果你想在這些輔助程式執行後執行任何項目,請使用 end佇列。

npm

你只需要呼叫 this.npmInstall() 來執行 npm 安裝。Yeoman 將確保即使 npm install 指令是由多個不同產生器多次呼叫的,指令也只會執行一次。

例如,你想要以開發相依性的方式安裝 lodash

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

這等於在專案中叫用

npm install lodash --save-dev

指令。

以程式設計方式管理 npm 相依性

如果你不想要使用範本,但希望固定相依性的版本,你可以以程式設計方式建立或延伸 package.json 檔案。Yeomans 的檔案系統工具可以協助你完成這項工作。

定義 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 指令是由多個不同產生器多次呼叫的,指令也只會執行一次。

例如,你想要以開發相依性的方式安裝 lodash

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

這等於在專案中叫用

yarn add lodash --dev

指令。

Bower

你只需要呼叫 this.bowerInstall() 即可啟動安裝。Yeoman 將確保即使 bower install 指令是由多個不同產生器多次呼叫的,指令也只會執行一次。

合併使用

預設情況下,呼叫 this.installDependencies() 會執行 npm 和 bower。你可以決定要使用哪一個套件管理員,並為每個套件管理員傳遞布林值。

與 Bower 搭配使用 Yarn 的範例

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

使用其他工具

Yeoman 提供了一項抽象化服務,讓使用者可以 生成 任何 CLI 指令。這項抽象化服務將常規化這些指令,以便它們可以在 Linux、Mac 和 Windows 系統中無縫執行。

例如,如果你是一個 PHP 愛好者,並希望執行 composer,你可以這樣寫

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

請務必在 install佇列中呼叫 spawnCommand 方法。你的使用者不想等待安裝指令執行完成。