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

时间:2014-08-10 21:36:36

标签: node.js yeoman yeoman-generator

我想在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);

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

问题:怎么样?

重要的是,我希望保持在本地依赖级别!

3 个答案:

答案 0 :(得分:4)

@ 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');
});

答案 1 :(得分:2)

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

答案 2 :(得分:1)

  

如果要将预定义的答案传递给提示,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
});