2013-10-25 25 views
0

在我自定義的Yeoman生成器中,我只想在安裝完所有Bower組件後才進行文件複製。目前,index.js回調看起來是這樣的:Yeoman自定義生成器 - 如何在依賴項回調中訪問生成的項目

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組件後訪問我的新建目錄?

回答

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'))); 
}; 
相關問題