Using Yoman programs programmatically inside nodejs

I want to use the yoma generator inside a NodeJS project

I installed yeoman-generatorand generator-git(the generator I want to use) as a local dependency, and at this point my code looks like this:

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);

obviously, the last line does not work and does not create a scaffold.

Question: how?

It is important to note that I want to stay at the level of local dependence!

+4
source share
3 answers

@ The simon-boudrias solution really works, but after I changed process.chdir(), this.templatePath()and this.destinationPath()returns the same path.

this.sourcePath(), , . yo-cli , .

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

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

env.create() - .

, generator.run(). .

:

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

+2

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
});
+1

All Articles