我想在NodeJS项目中使用yeoman生成器
我安装了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);
显然最后一行不起作用,也不会产生脚手架。
问题:怎么样?
重要的是,我希望保持在本地依赖级别!
答案 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
答案 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
});