在nodejs项目中以编程方式使用Yeoman

我想在NodeJS项目中使用yeoman生成器

我安装了yeoman-generatorgenerator-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); 

显然最后一行不起作用,不会产生脚手架。

问题:如何?

重要的是,我想留在当地的依赖水平!

@ simon-boudrias的解决scheme可以工作,但是在我改变process.chdir()this.templatePath()this.destinationPath()返回相同的path。

我可以使用this.sourcePath()来调整模板path,但不得不改变这个每个yeoman生成器是没有用的。 挖到溜溜之后,我find了下面的作品,不影响path。

 var env = require('yeoman-environment').createEnv(); env.lookup(function() { env.run('generator-name'); }); 

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环境类的相关文档可以在这里find: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 });