0

在我的自定义 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 组件后,如何访问新生成的目录?

4

1 回答 1

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')));
};
于 2013-10-31T09:05:51.510 回答