在我的自定义Yeoman生成器中,我想在安装完所有Bower组件后才进行一些文件复制。目前,在index.js
中,回调如下所示:
var SiteGenerator = module.exports = function SiteGenerator(args, options, config) {
yeoman.generators.Base.apply(this, arguments);
this.on('end', function () {
this.installDependencies({
skipInstall: options['skip-install'],
callback: function () {
this.copy('assets/bower_components/wordpress/index.php', 'app/index.php');
}.bind(this)
});
});
this.pkg = JSON.parse(this.readFileAsString(path.join(__dirname, '../package.json')));
};
但是,显然this
引用了原始生成器,而不是刚刚生成的站点。完成目录创建和复制的生成器函数是SiteGenerator.prototype.app = function app()
因此,在我尝试过的installDependencies
回调中:
SiteGenerator.prototype.app.copy()
但这显然会产生错误。
如何在安装Bower组件后访问新创建的目录?
答案 0 :(得分:1)
我发现访问项目目录的方法是:process.cwd()
因此,回调函数应如下所示:
var fs = require('fs');
var SiteGenerator = module.exports = function SiteGenerator(args, options, config) {
yeoman.generators.Base.apply(this, arguments);
this.on('end', function () {
this.installDependencies({
skipInstall: options['skip-install'],
callback: function () {
var projectDir = process.cwd();
fs.createReadStream(projectDir + '/bower_components/wordpress/index.php').pipe(fs.createWriteStream(projectDir + '/app/index.php'));
}.bind(this)
});
});
this.pkg = JSON.parse(this.readFileAsString(path.join(__dirname, '../package.json')));
};