javascript - 从节点脚本调用时如何跳过 Yeoman 生成器步骤

标签 javascript command-line-interface yeoman yeoman-generator

我有一个调用我编写的 Yeoman 生成器的节点 js 脚本,我想跳过提示步骤,因为我正在从脚本传递生成器的数据。我搜索了文档,但没有找到与此相关的任何内容。有可能吗?

我的脚本是这样的

const yeoman = require('yeoman-environment');
const env = yeoman.createEnv();

env.lookup(() => {

    env.run('mygenerator:subgenerator --moduleName Test3', {'skip-install': true, 'skip-prompting': true }, err => {
        console.log('done');
    });
});

我的生成器没有什么特别的:

const BaseGenerator = require('./../base/index.js');

module.exports = class extends BaseGenerator {

    constructor(args, opts) {
        super(args, opts);

        this.props = opts;

        const destinationFolder = args.destinationFolder || '';
        const moduleName = args.moduleName || '';

        this.props = {
            moduleName,
            destinationFolder,
        };
    }

    prompting() {
        //...
    }

    writing() {
        //...
    }

};

我知道生成器获取我从脚本传递的数据。我可能有一个生成器来处理输入,另一个生成器只用于写入文件。但是如果只有一个代码并且能够跳过一些步骤就好了。

我在一些 stackoverflow 答案中看到人们将 { 'skip-install': true } 选项传递给生成器。然后我尝试传递 { 'skip-prompting': true },但它什么也没做。

谢谢!

编辑

我解决这个问题的方法如下:

我所有的子生成器都扩展了我编写的 BaseGenerator,它是从 Yeoman 扩展而来的。在我的 BaseGenerator 中,我添加了这个方法:

    shouldPrompt() {
        return typeof this.props.options === 'undefined' || 
            (typeof this.props.options.moduleName === 'undefined' &&
             typeof this.props.options.destinationFolder === 'undefined');
    }

我在我的生成器中只使用了 2 个参数,moduleName 和 destinationFolder。所以,这就是我要检查的全部内容。然后,在子生成器中我添加了这个:

    prompting() {

        if (this.shouldPrompt()) {

            this.log(chalk.red('Reducer generator'));

            const prompts = [ /*...*/ ];

            return this.prompt(prompts).then((props) => { this.props.options = props; });
        }

    }

最佳答案

您需要定义optionsarguments 以接受来自终端的这些参数:http://yeoman.io/authoring/user-interactions.html

然后,只需使用 JavaScript 来运行或不运行 this.prompt() 调用(使用 if/else 结构或适用于您的用例的任何其他条件)

请记住,Yeoman 仍然只是 JS 代码:)

关于javascript - 从节点脚本调用时如何跳过 Yeoman 生成器步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48980309/

相关文章:

javascript - 为什么 onMouseOver 操作在 javaScript 中似乎不起作用?

javascript - 在第二次加载时更改 iframe 样式,在 Internet Explorer 9 中不起作用

python - 将 Flask 的 Click CLI 与应用工厂模式结合使用

node.js - Ocif 动态自动完成与 http 调用

angularjs - 没有为 Angular 添加 bower 传递依赖

node.js - 安装 Yeoman 时出错 (npm install -g yo)

gruntjs - 如何加载两个同名的grunt任务?

javascript - 定义 var 时抛出 undefined

Javascript/jQuery : How to increment a number and highlight text when selected

windows - 如何仅针对Windows 7下载Docker CLI