專案架構
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 範本
- grunt-init-commonjs - 建立 commonjs 模組,包括 Nodeunit 單元測試。(範例「已產生」儲存庫 | 建立記錄)
- grunt-init-gruntfile - 建立基本的 Gruntfile。(範例「已產生」儲存庫 | 建立記錄)
- grunt-init-gruntplugin - 建立 Grunt 外掛程式,包括 Nodeunit 單元測試。(範例「已產生」儲存庫 | 建立記錄)
- grunt-init-jquery - 建立 jQuery 外掛程式,包括 QUnit 單元測試。(範例「已產生」儲存庫 | 建立記錄)
- grunt-init-node - 建立 Node.js 模組,包括 Nodeunit 單元測試。(範例「已產生」儲存庫 | 建立記錄)
自訂範本
您可以建立和使用自訂範本。您的範本必須遵循與上述範本相同的結構。
名為 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.filesToCopy
和 init.copyAndProcess
方法,當執行 init 範本時,root/
子目錄中的任何檔案都將複製到目前目錄中。
請注意,所有複製檔案都將做為範本處理,任何 {% %}
範本都將根據收集的 props
資料物件處理,除非設定了 noProcess
選項。請參閱 jquery 範本 以取得範例。
重新命名或排除範本檔案
rename.json
描述 sourcepath
到 destpath
的重新命名對應。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 init
或 grunt-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 版本。必須是有效的語意版本範圍描述符。
授權
專案授權。多個授權以空白分隔。內建授權為:MIT
、MPL-2.0
、GPL-2.0
和 Apache-2.0
。預設為 MIT
。使用 init.addLicenseFiles 新增自訂授權。
main
專案的主要進入點。預設為 lib
資料夾中的專案名稱。
名稱
專案名稱。會在整個專案範本中大量使用。預設為目前的作業目錄。
node_version
專案需要的 Node.js 版本。必須是有效的語意版本範圍描述符。
npm_test
在專案上執行測試的指令。預設為 grunt
。
儲存庫
專案的 git 儲存庫。預設為猜測的 GitHub 網址。
標題
人類可讀的專案名稱。預設為實際的專案名稱,調整為更適合人類閱讀。
版本
專案版本。預設為第一個有效的語意版本,0.1.0
。