管理依赖项

运行生成器后,您通常需要运行 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 文件。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 命令仅运行一次。

例如,您想将 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。您可以通过为每个包管理器传递布尔值来决定使用哪些包管理器。

使用 Yarn 和 Bower 的示例

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

使用其他工具

Yeoman 提供了一个抽象层,允许用户 spawn 任何 CLI 命令。此抽象层将规范化为命令,以便它可以在 Linux、Mac 和 Windows 系统上无缝运行。

例如,如果您是 PHP 爱好者并希望运行 composer,则可以这样编写

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

确保在 install 队列中调用 spawnCommand 方法。您的用户不希望等待安装命令完成。