2013-12-21 129 views
3

我想添加一個選項,用於調試我的生成器或脫機工作時,將從緩存中下載npm和bower的東西(分別使用--cache-min 999999--offline--offline)。Yeoman:從緩存中安裝依賴項

目前,這是我的代碼(這兩種安裝的依賴關係,並呼籲grunt bower):

CallumGenerator.prototype.installDeps = function() { 
    var cb = this.async(); 

    this.installDependencies({ 
     skipInstall: this.options['skip-install'], 
     callback: function() { 
      this.spawnCommand('grunt', ['bower']) 
       .on('close', function() { 
        cb(); 
       }); 
     }.bind(this) 
    }); 
}; 

它看起來像我將最有可能不得不調用.npmInstall().bowerInstall()以指定選項手動(我想?),但我不知道如何指定任何選項。爲了澄清,這是我會怎麼做它在控制檯:

npm install --cache-min 999999 --save-dev grunt-contrib-less 
bower install --offline --save jquery#1.10.2 
+0

你不能'this.spawnCommand('bower',['install','--offline','--save jquery#1.10.2'])'? – mekwall

+0

嗯,我可以,但我有很多事情要安裝,我不特別想手動解析bower.json和package.json - 必須有更好的方法。 – callumacrae

回答

2

不能從#installDependencies直接看到指定選項:https://github.com/yeoman/generator/blob/master/lib/actions/install.js#L44-L69

您可以指定它們都#npmInstallbowerInstallhttps://github.com/yeoman/generator/blob/master/lib/actions/install.js#L121-L143

您傳遞的options是對象哈希的形式,將由dargs節點模塊解析,因此您should follow the module conventions for declaring options

+0

謝謝。但是,如何在'.npmInstall()'中指定包?我不明白'.installDependencies()'在做什麼。 – callumacrae

+1

那麼,'#npmInstall'只需傳遞你想要安裝的軟件包作爲選項。 '#installDependencies'只是依靠'package.json'和'bower.json'包聲明(這是IMO最常見的用例) –

0

我使用的代碼,這應該是罰款,任何人使用(你可能想擺脫最終的回調,雖然):

CallumGenerator.prototype.installDeps = function() { 
    var cb = this.async(); 

    this.npmInstall(null, { 
     skipInstall: this.options['skip-install'], 
     cacheMin: this.cachedDeps ? 999999 : 0 
    }, function() { 
     this.bowerInstall(null, { 
      skipInstall: this.options['skip-install'], 
      offline: this.cachedDeps 
     }, function() { 
      this.spawnCommand('grunt', ['bower']) 
       .on('close', function() { 
        cb(); 
       }); 
     }.bind(this)); 
    }.bind(this)); 
}; 

它工作正常。 this.cachedDeps將定義緩存是否被使用。