在執行產生器之後,你通常需要執行 npm(或 Yarn)和 Bower,以安裝任何你產生器所需的相依性。
由於這些任務的執行頻率極高,因此 Yeoman 已經抽象化這些任務。我們也會介紹如何透過其他工具啟動安裝。
請注意,Yeoman 所提供的安裝輔助程式會自動將安裝排程在 install
佇列中執行一次。如果你想在這些輔助程式執行後執行任何項目,請使用 end
佇列。
npm
你只需要呼叫 this.npmInstall()
來執行 npm
安裝。Yeoman 將確保即使 npm install
指令是由多個不同產生器多次呼叫的,指令也只會執行一次。
例如,你想要以開發相依性的方式安裝 lodash
class extends Generator {
installingLodash() {
this.npmInstall(['lodash'], { 'save-dev': true });
}
}
這等於在專案中叫用
npm install lodash --save-dev
指令。
以程式設計方式管理 npm 相依性
如果你不想要使用範本,但希望固定相依性的版本,你可以以程式設計方式建立或延伸 package.json
檔案。Yeomans 的檔案系統工具可以協助你完成這項工作。
定義 eslint
為開發相依性,將 react
定義為相依性的範例
class extends Generator {
writing() {
const pkgJson = {
devDependencies: {
eslint: '^3.15.0'
},
dependencies: {
react: '^16.2.0'
}
};
// Extend or create package.json file in destination path
this.fs.extendJSON(this.destinationPath('package.json'), pkgJson);
}
install() {
this.npmInstall();
}
};
Yarn
你只需要呼叫 this.yarnInstall()
即可啟動安裝。Yeoman 將確保即使 yarn install
指令是由多個不同產生器多次呼叫的,指令也只會執行一次。
例如,你想要以開發相依性的方式安裝 lodash
generators.Base.extend({
installingLodash: function() {
this.yarnInstall(['lodash'], { 'dev': true });
}
});
這等於在專案中叫用
yarn add lodash --dev
指令。
Bower
你只需要呼叫 this.bowerInstall()
即可啟動安裝。Yeoman 將確保即使 bower install
指令是由多個不同產生器多次呼叫的,指令也只會執行一次。
合併使用
預設情況下,呼叫 this.installDependencies()
會執行 npm 和 bower。你可以決定要使用哪一個套件管理員,並為每個套件管理員傳遞布林值。
與 Bower 搭配使用 Yarn 的範例
generators.Base.extend({
install: function () {
this.installDependencies({
npm: false,
bower: true,
yarn: true
});
}
});
使用其他工具
Yeoman 提供了一項抽象化服務,讓使用者可以 生成
任何 CLI 指令。這項抽象化服務將常規化這些指令,以便它們可以在 Linux、Mac 和 Windows 系統中無縫執行。
例如,如果你是一個 PHP 愛好者,並希望執行 composer
,你可以這樣寫
class extends Generator {
install() {
this.spawnCommand('composer', ['install']);
}
}
請務必在 install
佇列中呼叫 spawnCommand
方法。你的使用者不想等待安裝指令執行完成。