当yeoman以嵌入的形式运行时,我无法运行子生成器。
integrating yeoman in other tools的文档提供了此示例:
var yeoman = require('yeoman-environment');
var env = yeoman.createEnv();
env.register(require.resolve('generator-mine'), 'mine:app');
env.run('mine:app', done);
这也适用于我的生成器mine
。
但是,当我尝试使用相同的代码运行任何子生成器(mine:client
)时,它无法正常工作。有两种失败模式。
首先,如果我只注册应用程序生成器,并尝试运行子生成器:
var yeoman = require('yeoman-environment');
var env = yeoman.createEnv();
env.register(require.resolve('generator-mine'), 'mine:app');
env.run('mine:client', done);
我明白了:
You don't seem to have a generator with the name “mine:client” installed.
其次,如果我同时注册app和子生成器,并尝试运行子生成器:
var yeoman = require('yeoman-environment');
var env = yeoman.createEnv();
env.register(require.resolve('generator-mine'), 'mine:app');
env.register(require.resolve('generator-mine'), 'mine:client');
env.run('mine:client', done);
然后没有错误消息。但是,运行mine:app
生成器而不是所需的mine:client
生成器。
请记住,当直接从shell调用时,子生成器按预期工作。
我错过了什么?
答案 0 :(得分:2)
env.register()
没有搜索yeoman generator-XXX所有generators/*/index.js
它只使用main:
中的package.json
条目。
env.lookup()
扫描generator- *的节点安装并注册它找到的所有生成器。
更改
env.register(require.resolve('generator-mine'), 'mine:client');
要
env.lookup(() => { folder
env.run('mine:client', {}, err => { console.log('done'); });
});