编写自己的Yeoman生成器-5.依赖关系管理

一旦运行了生成器,通常需要运行npm(或Yarn)和Bower来安装生成器所需的任何附加依赖项。

由于这些任务非常频繁,Yeoman已经把它们抽象出来了。我们还将介绍如何通过其他工具启动安装。

注意,Yeoman提供的安装助手将自动安排安装作为install队列的一部分运行一次。如果您需要在它们运行之后运行任何东西,请使用end队列。

NPM

您只需要调用this.npmInstall()即可运行npm安装。npm install即使多个生成器多次调用命令,Yeoman也会确保命令只运行一次。

例如,您希望将lodash安装为dev依赖项:

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

这相当于调用:

1
npm install lodash --save-dev

在项目的命令行上。

以编程方式管理npm依赖项

如果您不想使用package.json模板但希望拥有固定版本的依赖项,则可以以编程方式创建或扩展文件。Yeomans文件系统工具可以帮助您完成这项工作。

定义eslint为dev依赖项和react依赖项的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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()即可启动安装。yarn install即使多个生成器多次调用命令,Yeoman也会确保命令只运行一次。

例如,您希望将lodash安装为dev依赖项:

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

这相当于调用:

1
yarn add lodash --dev

在项目的命令行上。

Bower

您只需要调用this.bowerInstall()即可启动安装。bower install即使多个生成器多次调用命令,Yeoman也会确保命令只运行一次。

综合使用

默认情况下,this.installDependencies()调用运行npm和bower。您可以通过为每个包管理器传递布尔值来决定使用哪些。

使用Yarn与Bower的例子:

1
2
3
4
5
6
7
8
9
generators.Base.extend({
install: function () {
this.installDependencies({
npm: false,
bower: true,
yarn: true
});
}
});

使用其他工具

Yeoman提供了一个抽象,允许用户使用spawn任何CLI命令。这种抽象将标准化为命令,因此它可以在Linux,Mac和Windows系统中无缝运行。

例如,如果你是一个PHP爱好者,并希望运行composer,你可以这样写:

1
2
3
4
5
class extends Generator {
install() {
this.spawnCommand('composer', ['install']);
}
}

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

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2021 朝着牛逼的道路一路狂奔 All Rights Reserved.

访客数 : | 访问量 :