黑人生命也是命

專案架構

grunt-init

Grunt-init 是一個用於自動化專案建立的架構工具。它會根據目前的環境和一些問題的答案來建立一個完整的目錄結構。建立的確切檔案和內容取決於所選的範本以及所提出的問題的答案。

注意:這個獨立的工具程式過去曾作為 Grunt 中的「init」任務。請參閱 Grunt 從 0.3 升級到 0.4 指南,以取得有關此變更的更多資訊。

安裝

若要使用 grunt-init,您需要將其安裝為全域性套件。

npm install -g grunt-init

這會將 grunt-init 指令放入您的系統路徑中,讓您可以在任何地方執行它。

注意:您可能需要使用 sudo 或以管理員身分執行您的指令殼層才能執行此操作。

用法

  • 使用 grunt-init --help 取得程式說明和可用範本清單
  • 使用 grunt-init TEMPLATE 根據可用範本建立專案
  • 使用 grunt-init /path/to/TEMPLATE 根據任意位置的範本建立專案

請注意,大多數範本會在目前目錄中產生檔案,因此如果您不想覆寫現有檔案,請務必先變更到新的目錄。

安裝範本

一旦範本安裝到您的 ~/.grunt-init/ 目錄中(Windows 上為 %USERPROFILE%\.grunt-init\),它們就可以透過 grunt-init 使用。建議您使用 git 將範本複製到該目錄中。例如,grunt-init-jquery 範本可以這樣安裝

git clone https://github.com/gruntjs/grunt-init-jquery.git ~/.grunt-init/jquery

注意:如果您想將範本作為「foobarbaz」在本地提供,您可以在複製時指定~/.grunt-init/foobarbaz。Grunt-init 將使用實際範本目錄名稱,因為它存在於 ~/.grunt-init/ 目錄中。

官方維護一些 grunt-init 範本

自訂範本

您可以建立和使用自訂範本。您的範本必須遵循與上述範本相同的結構。

名為 my-template 的範例範本將遵循此一般檔案結構

  • my-template/template.js - 主要範本檔案。
  • my-template/rename.json - 範本特定的重新命名規則,處理為範本。
  • my-template/root/ - 要複製到目標位置的檔案。

假設這些檔案存在於 /path/to/my-template,命令 grunt-init /path/to/my-template 將用於處理範本。多個唯一命名的範本可能存在於同一個目錄中。

此外,如果您將此自訂範本放在 ~/.grunt-init/ 目錄(Windows 上的 %USERPROFILE%\.grunt-init\)中,它將自動可以使用,只需使用 grunt-init my-template 即可。

複製檔案

只要範本使用 init.filesToCopyinit.copyAndProcess 方法,當執行 init 範本時,root/ 子目錄中的任何檔案都將複製到目前目錄中。

請注意,所有複製檔案都將做為範本處理,任何 {% %} 範本都將根據收集的 props 資料物件處理,除非設定了 noProcess 選項。請參閱 jquery 範本 以取得範例。

重新命名或排除範本檔案

rename.json 描述 sourcepathdestpath 的重新命名對應。sourcepath 必須是相對於 root/ 資料夾要複製的檔案路徑,但 destpath 值可以包含 {% %} 範本,描述目的地路徑為何。

如果將 false 指定為 destpath,則不會複製檔案。此外,srcpath 支援全域模式。

指定預設提示答案

每個 init 提示都有預設值硬編碼,或查看目前環境以嘗試確定該預設值。如果您想覆寫特定提示的預設值,可以在 OS X 或 Linux 的選用 ~/.grunt-init/defaults.json 或 Windows 的 %USERPROFILE%\.grunt-init\defaults.json 檔案中執行此動作。

例如,我的 defaults.json 檔案看起來像這樣,因為我想使用與預設名稱略有不同的名稱,我想排除我的電子郵件地址,而且我想自動指定作者網址。

{
  "author_name": "\"Cowboy\" Ben Alman",
  "author_email": "none",
  "author_url": "http://benalman.com/"
}

注意:在所有內建提示都已記錄之前,您可以在 原始碼 中找到它們的名稱和預設值。

定義 init 範本

exports.description

當使用者執行 grunt initgrunt-init 以顯示所有可用 init 範本清單時,此簡短範本說明將與範本名稱一起顯示。

exports.description = descriptionString;

exports.notes

如果指定,此選用延伸說明將在顯示任何提示之前顯示。這是提供使用者一點說明,解釋命名慣例、哪些提示可能是必需或選用的好地方等。

exports.notes = notesString;

exports.warnOn

如果符合此選用(但建議)的外卡模式或外卡模式陣列,Grunt 將中止並顯示警告,使用者可以使用 --force 覆寫。這在 init 範本可能會覆寫現有檔案的情況下非常有用。

exports.warnOn = wildcardPattern;

雖然最常見的值將是 '*',與任何檔案或目錄相符,但所使用的 minimatch 外卡模式語法允許極大的彈性。例如

exports.warnOn = 'Gruntfile.js';    // Warn on a Gruntfile.js file.
exports.warnOn = '*.js';            // Warn on any .js file.
exports.warnOn = '*';               // Warn on any non-dotfile or non-dotdir.
exports.warnOn = '.*';              // Warn on any dotfile or dotdir.
exports.warnOn = '{.*,*}';          // Warn on any file or dir (dot or non-dot).
exports.warnOn = '!*/**';           // Warn on any file (ignoring dirs).
exports.warnOn = '*.{png,gif,jpg}'; // Warn on any image file.

// This is another way of writing the last example.
exports.warnOn = ['*.png', '*.gif', '*.jpg'];

exports.template

雖然 exports 屬性是在此函數外部定義的,但所有實際的初始化程式碼都指定在函數內部。此函數會傳入三個引數。grunt 引數是對 grunt 的參照,包含所有 grunt 方法和函式庫init 引數是一個包含特定於此初始化範本的方法和屬性的物件。done 引數是一個函數,必須在初始化範本執行完畢時呼叫它。

exports.template = function(grunt, init, done) {
  // See the "Inside an init template" section.
};

在初始化範本內部

init.addLicenseFiles

將命名正確的授權檔案新增到檔案物件中。

var files = {};
var licenses = ['MIT'];
init.addLicenseFiles(files, licenses);
// files === {'LICENSE-MIT': 'licenses/LICENSE-MIT'}

init.availableLicenses

傳回可用授權的陣列。

var licenses = init.availableLicenses();
// licenses === [ 'Apache-2.0', 'GPL-2.0', 'MIT', 'MPL-2.0' ]

init.copy

給定絕對或相對來源路徑,以及一個選擇性的相對目的地路徑,複製一個檔案,選擇性地透過傳遞的回呼處理它。

init.copy(srcpath[, destpath], options)

init.copyAndProcess

反覆處理傳遞物件中的所有檔案,將來源檔案複製到目的地,處理其內容。

init.copyAndProcess(files, props[, options])

init.defaults

使用者指定的預設初始化值,來自 defaults.json

init.defaults

init.destpath

絕對目的地檔案路徑。

init.destpath()

init.expand

grunt.file.expand 相同。

傳回與給定的萬用字元模式相符的所有檔案或目錄路徑的唯一陣列。此方法接受以逗號分隔的萬用字元模式或萬用字元模式陣列。與以 ! 開頭的模式相符的路徑會從傳回的陣列中排除。模式會依序處理,因此包含和排除順序很重要。

init.expand([options, ] patterns)

init.filesToCopy

傳回一個包含要複製的檔案的物件,其中包含其絕對來源路徑和相對目的地路徑,並根據 rename.json(如果存在)中的規則重新命名(或省略)。

var files = init.filesToCopy(props);
/* files === { '.gitignore': 'template/root/.gitignore',
  '.jshintrc': 'template/root/.jshintrc',
  'Gruntfile.js': 'template/root/Gruntfile.js',
  'README.md': 'template/root/README.md',
  'test/test_test.js': 'template/root/test/name_test.js' } */

init.getFile

取得單一工作檔案路徑。

init.getFile(filepath[, ...])

init.getTemplates

傳回所有可用範本的物件。

init.getTemplates()

init.initSearchDirs

初始化要搜尋 init 範本的目錄。template 是範本的位置。也會包含 ~/.grunt-init/ 和 grunt-init 中的核心 init 工作。

init.initSearchDirs([filename])

init.process

啟動程序以開始提示輸入。

init.process(options, prompts, done)
init.process({}, [
  // Prompt for these values
  init.prompt('name'),
  init.prompt('description'),
  init.prompt('version')
], function(err, props) {
  // All finished, do something with the properties
});

init.prompt

提示使用者輸入值。

init.prompt(name[, default])

init.prompts

所有提示的物件。

var prompts = init.prompts;

init.readDefaults

從工作檔案 (如果存在) 讀取 JSON 預設值,並將它們合併成一個資料物件。

init.readDefaults(filepath[, ...])

init.renames

範本的重新命名規則。

var renames = init.renames;
// renames === { 'test/name_test.js': 'test/{%= name %}_test.js' }

init.searchDirs

要搜尋範本的目錄陣列。

var dirs = init.searchDirs;
/* dirs === [ '/Users/shama/.grunt-init',
  '/usr/local/lib/node_modules/grunt-init/templates' ] */

init.srcpath

在 init 範本路徑中搜尋檔案名稱,並傳回絕對路徑。

init.srcpath(filepath[, ...])

init.userDir

傳回使用者範本目錄的絕對路徑。

var dir = init.userDir();
// dir === '/Users/shama/.grunt-init'

init.writePackageJSON

儲存 package.json 檔案至目標目錄。可使用 callback 來後處理要新增/移除/其他動作的屬性。

init.writePackageJSON(filename, props[, callback])

內建提示

author_email

要在 package.json 中使用的作者電子郵件地址。會嘗試從使用者的 git 設定中尋找預設值。

author_name

要在 package.json 和版權公告中使用的作者全名。會嘗試從使用者的 git 設定中尋找預設值。

author_url

要在 package.json 中使用的作者網站的公開 URL。

bin

專案根目錄的 cli 腳本相對路徑。

錯誤

專案問題追蹤器的公開網址。如果專案有 GitHub 儲存庫,預設為 GitHub 問題追蹤器。

說明

專案說明。用於 package.json 和 README 檔案。

grunt_version

專案需要的 Grunt 有效語意版本範圍描述符。

首頁

專案首頁的公開網址。如果專案有 GitHub 儲存庫,預設為 GitHub 網址。

jquery_version

如果是 jQuery 專案,專案需要的 jQuery 版本。必須是有效的語意版本範圍描述符。

授權

專案授權。多個授權以空白分隔。內建授權為:MITMPL-2.0GPL-2.0Apache-2.0。預設為 MIT。使用 init.addLicenseFiles 新增自訂授權。

main

專案的主要進入點。預設為 lib 資料夾中的專案名稱。

名稱

專案名稱。會在整個專案範本中大量使用。預設為目前的作業目錄。

node_version

專案需要的 Node.js 版本。必須是有效的語意版本範圍描述符。

npm_test

在專案上執行測試的指令。預設為 grunt

儲存庫

專案的 git 儲存庫。預設為猜測的 GitHub 網址。

標題

人類可讀的專案名稱。預設為實際的專案名稱,調整為更適合人類閱讀。

版本

專案版本。預設為第一個有效的語意版本,0.1.0