Использование Yeoman программно в проекте nodejs

Я хочу использовать генератор йоменов внутри проекта NodeJS

Я установил yeoman-generatorа также generator-git (генератор, который я хочу использовать) в качестве локальной зависимости, и на данный момент мой код выглядит так:

var env = require('yeoman-generator')();
var path = require('path');
var gitGenerator = require('generator-git');
var workingDirectory = path.join(process.cwd(), 'install_here/');
generator = env.create(gitGenerator);

очевидно, что последняя строка не работает и не создает эшафот.

Вопрос: как?

Важно отметить, что я хочу оставаться на локальном уровне зависимости!

3 ответа

Решение

Решение @simon-boudrias работает, но после того, как я изменил process.chdir(), this.templatePath() а также this.destinationPath() возвращает тот же путь.

Я мог бы использовать this.sourcePath(), чтобы настроить путь к шаблону, но необходимость менять его для каждого генератора yeoman не так полезна. После поиска в yo-cli я нашел следующие работы, не влияющие на путь.

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

env.lookup(function() {
    env.run('generator-name');
});

env.create() только создать экземпляр генератора - он не запускается.

Чтобы запустить его, вы можете позвонить generator.run(), Но это не идеально.

Лучший способ IMO был бы таким:

var path = require('path');
var env = require('yeoman-generator')();
var gitGenerator = require('generator-git');

// Optionnal: look every generator in your system. That'll allow composition if needed:
// env.lookup();

env.registerStub(gitGenerator, 'git:app');
env.run('git:app');

При необходимости убедитесь, что process.chdir() в правильном каталоге перед запуском вашего генератора.

Соответствующую документацию по классу Yeoman Environment можно найти здесь: http://yeoman.io/environment/Environment.html

Также смотрите: http://yeoman.io/authoring/integrating-yeoman.html

yeoman-test Модуль также очень полезен, если вы хотите передать предопределенные ответы на ваши запросы. Это сработало для меня.

var yeomanTest = require('yeoman-test');
var answers = require('from/some/file.json');

var context = yeomanTest.run(path.resolve('path/to/generator'));
context.settings.tmpdir = false; // don't run in tempdir
context.withGenerators([
  'paths/to/subgenerators',
  'more/of/them'
])
.withOptions({ // execute with options
  'skip-install': true,
  'skip-sdk': true
})
.withPrompts(answers)  // answer prompts
.on('end', function () {
  // do some stuff here
});
Другие вопросы по тегам