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 に答える