正在尋找 grunt 插件?請造訪 grunt-assemble。
(請注意,目前網站 assemble.io 用於 grunt-assemble。感謝您在我們使用最新彙編文件更新網站時的耐心等待) 。
(按一下以下部分將其展開)
(由動詞使用 markdown-toc 產生的 TOC)
Assemble 是一個命令列工具和開發人員框架,用於快速原型設計、靜態網站產生等。
Assemble 被 170 多個國家的數千名開發人員和團隊使用!以下是使用 assemble 建立的網站的一些範例:
您的網站、部落格或專案是用 assemble 建立的嗎?請告知我們!
Assemble 可以獨立使用,但與以下庫一起使用時它會更強大:
以下是 assemble 提供的部分功能:
使用 npm 新增組裝項目的devDependencies
:
$ npm install -D assemble
現在您應該能夠直接執行 assemble(使用node assemblefile.js
等)或使用npm
腳本。例如,將以下內容新增至 package.json:
{
"scripts" : {
"build" : " assemble "
}
}
然後運行
$ npm run build
您也可以全域彙編 CLI,這會將assemble
命令新增至您的系統路徑,從而允許它從任何目錄運行。
$ npm install --global assemble
請注意,即使 assemble 是全域安裝的,最好的做法是在每個專案中本地安裝它,以確保您的專案免受開發週期之間 assemble 中可能發生的任何潛在破壞性變更的影響。
要使用 assemble 的 CLI,您需要將assemblefile.js
加入您的專案中。最快的方法是執行以下命令:
$ assemble
如果目前專案中不存在assemblefile.js
,assemble 會詢問您是否要新增一個。如果您回答“是”,assemble 將為您產生一個基本的assembfile.js
。
從命令列運行彙編。
$ assemble < tasks > [options]
指定要執行的一項或多項以空格分隔的任務。
範例
運行任務foo
$ assemble foo
運行任務foo
和bar
$ assemble foo bar
非任務選項以--
為前綴。
範例
設定--cwd
以在不同的目錄中執行 assemblefile.js:
$ assemble --cwd=docs
在載入視圖時發出視圖並將其記錄到stderr
:
$ assemble --emit=view
看更多[命令列選項](#命令列選項)
可以使用命令列參數中的鍵或值的點表示法來指定物件路徑。
此外,彙編使用擴充物件(和一些自訂解析)來更輕鬆地透過命令列傳遞重要的選項和命令。所以以下所有格式都是可能的。
範例
布林值:
$ assemble --foo
# { foo: true }
鍵值對:
$ assemble --foo=bar
# { foo: 'bar' }
嵌套布林值:
$ assemble --option=foo
# {options: { foo: true }}
嵌套鍵值對:
$ assemble --option=foo:bar
# {options: { foo: 'bar' }}
深度嵌套的鍵值對:
$ assemble --option=foo.bar.baz:qux
# {options: foo: { bar: { baz: 'qux' }}}}
或在=
的左側:
$ assemble --option.foo.bar.baz=qux
# {options: foo: { bar: { baz: 'qux' }}}}
更改要執行的assemblefile.js
的cwd
,可以選擇指定要執行的任何任務:
$ assemble < tasks > --cwd [directory]
例子
要執行examples/
目錄中的scaffolds
範例,您需要輸入:
$ assemble --cwd examples/scaffolds
如果成功,您應該在命令列中看到如下內容:
指定 assemble 的 CLI 運行的設定檔的名稱,預設為assemblefile.js
。
例子
$ assemble --file assemblefile.dev.js
建立一個assemble
應用程式。這是 assemble 模組導出的主要函數。
參數
options
{Object} :可以選擇傳遞要使用的預設選項。例子
var assemble = require ( 'assemble' ) ;
var app = assemble ( ) ;
Assemble 公開了範本庫中的整個 API,用於處理範本和範本集合。該 API 比此處記錄的內容要廣泛得多,請參閱範本以取得更多文件。
模板和視圖
在以下文件中,術語「範本」和「視圖」均指同一事物的各個方面。他們的意思是這樣的:
template
:實際的模板字串view
:具有包含模板字串的content
屬性的物件。由於視圖是乙烯基的實例,因此您可以將視圖視為“模板的乙烯基文件”。 建立用於快取視圖的範本集合:
app . create ( 'includes' , { viewType : 'partial' } ) ;
選項
cwd
{String} :從 glob 將模板載入到集合時使用的基底目錄
viewType
: {String|Array} :與集合關聯的一種或多種視圖類型
新增視圖
將視圖新增至集合:
app . include ( 'foo.md' , { contents : new Buffer ( 'this is contents' ) } ) ;
新增多個視圖:
app . includes ( {
path : 'foo.md' , contents : new Buffer ( 'this is contents' ) ,
path : 'bar.md' , contents : new Buffer ( 'this is contents' ) ,
path : 'baz.md' , contents : new Buffer ( 'this is contents' )
} ) ;
// or pass a glob (optionally override `cwd` defined on `.create`)
app . includes ( '*.{md,hbs}' , { cwd : 'templates/includes' } ) ;
視圖類型在集合上定義,以決定在整個[渲染週期][]中如何處理集合中的範本。
可用類型
Assemble 支援三種視圖類型:
partial
:這種類型的視圖可以用作「部分」(或「部分視圖」),可以注入到其他視圖中。對於元件、文件片段或可重複使用程式碼或內容的其他片段很有用。這些視圖被傳遞到渲染引擎以用作局部視圖,或者如果不直接支援局部視圖,則用作上下文中的變數。layout
:允許視圖使用通用程式碼或內容「包裝」其他視圖(任何類型,包括其他佈局或部分視圖)。renderable
:與渲染檔案有一對一關係的視圖,最終對網站的使用者或訪客可見。例如:頁面或部落格文章。如果未設定其他視圖類型,則會自動設定renderable
視圖類型。定義視圖類型
您可以在建立集合時定義視圖類型:
app . create ( 'snippet' , { viewType : 'partial' } ) ;
或直接在集合選項上:
app . create ( 'snippet' ) ;
app . snippets . option ( 'viewType' , [ 'partial' ] ) ; // string or array
註冊模板引擎以使用給定的ext
渲染視圖:
app . engine ( ext , fn ) ;
參數
ext
{String} :使用引擎渲染的檔案的檔案副檔名fn
{Function} :遵循整合引擎約定的非同步函數,並採用三個參數: str
、 locals
和callback
。例子
// this engine is already registered in assemble
app . engine ( 'hbs' , require ( 'engine-handlebars' ) ) ;
// create a custom engine
app . engine ( 'txt' , function ( str , locals , cb ) {
// render `str` with `locals`
cb ( null , str ) ;
} ) ;
您可以透過在options.engine
上設定值來告訴 assemble 對所有檔案副檔名使用相同的引擎。
例子
// use engine `hbs` for rendering all files
app . option ( 'engine' , 'hbs' ) ;
或者,如果您使用 .renderFile,則可以透過傳遞引擎名稱強制使用特定引擎。
例子
使用hbs
引擎渲染所有模板:
app . src ( 'templates/*.*' )
. pipe ( app . renderFile ( 'hbs' ) )
使用給定的locals
和callback
渲染視圖。
app . render ( view , { title : 'Foo' } , function ( err , view ) {
// `view` is an object with a rendered `content` property
} ) ;
參數
view
{Object|String} :要渲染的視圖locals
{Object} :傳遞給模板引擎以在view
中渲染模板的本地變量callback
{函數}Assemble 提供了以下使用檔案系統的低階方法:
Assemble 對 Vinyl-fs 具有一流的支持,因此任何 gulp 插件都可以在您的 assemble 管道中使用。
創建黑膠唱片串流。採用全域模式或檔案路徑來讀取來源檔案。
參數
glob
{String|Array} :Glob 模式或來源檔案的檔案路徑。options
{Object} :要合併到上下文中和/或傳遞給src
外掛程式的選項或本地變數例子
app . src ( 'src/*.hbs' ) ;
// define `src` options
app . src ( 'src/*.hbs' , { layout : 'default' } ) ;
指定已處理文件的目的地。
參數
dest
{String|Function} :檔案路徑或重新命名函數。options
{Object} :傳遞給dest
外掛程式的選項和本地變數例子
app . dest ( 'dist/' ) ;
將具有給定 glob patterns
檔案複製到指定的dest
。
參數
patterns
{String|Array} :要複製的檔案的全域模式。dest
{String|Function} :目標目錄。returns
{Stream} :流,必要時繼續處理。例子
app . task ( 'assets' , function ( ) {
// return, to let assemble know when the task has completed
return app . copy ( 'assets/**' , 'dist/' ) ;
} ) ;
在檔案通過串流推送時渲染檔案。
app . src ( '*.hbs' )
. pipe ( app . renderfile ( ) )
. pipe ( app . dest ( 'foo' ) ) ;
強制使用特定引擎來渲染檔案:
app . engine ( 'txt' , function ( str , locals , cb ) {
cb ( null , str ) ;
} ) ;
app . src ( '*.hbs' )
. pipe ( app . renderfile ( 'txt' ) ) //<= use engine `txt`
. pipe ( app . dest ( 'foo' ) ) ;
Assemble 有以下用於執行任務和控制工作流程的方法:
定義呼叫任務時要執行的任務。
參數
name
{String} :任務名稱fn
{Function} :任務執行時期呼叫的函數。例子
app . task ( 'default' , function ( ) {
app . src ( 'templates/*.hbs' )
. pipe ( app . dest ( 'site/' ) ) ;
} ) ;
運行一項或多項任務。
參數
tasks
{Array|String} :任務名稱或任務名稱陣列。cb
{Function} :暴露err
的回呼函數例子
app . build ( [ 'foo' , 'bar' ] , function ( err ) {
if ( err ) throw err ;
console . log ( 'done!' ) ;
} ) ;
監視文件,當監視的文件發生變更時運行一項或多項任務。
參數
glob
{String|Array} :檔案路徑或 glob 模式。tasks
{Array} :要觀看的任務。例子
app . task ( 'watch' , function ( ) {
app . watch ( 'docs/*.md' , [ 'docs' ] ) ;
} ) ;
任何基於基礎構建的應用程式的插件都應該與 Assemble 一起使用,並且可以在您的assemblefile.js
中使用:
baseplugin
關鍵字在 npm 上尋找基本插件assembleplugin
關鍵字在 npm 上尋找 assemble 插件generateplugin
關鍵字在npm上尋找生成插件templatesplugin
關鍵字在 npm 上尋找模板插件updateplugin
關鍵字在 npm 上尋找更新插件verbplugin
關鍵字在 npm 上尋找 verb 插件請造訪外掛程式文件指南,以了解如何使用、創作和發布外掛程式。
聯絡我們!
有疑問、建議或想討論組裝嗎?加入 gitter 上的對話或在 Twitter 上留言給我們。組裝團隊和社群總是樂意提供協助!
網站已過時,正在重構!
Assemble 的網站 assemble.io 只有與 gulp-assemble 相關的資訊。我們正在努力用有關最新版本的資訊更新網站。
同時,您可能會發現 WIP 文件很有用。單元測試也是很好的例子!
組裝網站是最新的嗎?
不,正如上面提到的,它已經完全過時了。如果您使用 grunt-assemble,assemble.io 上的一些文件可能仍然有用。如果您使用的是 assemble v0.6.0 及更高版本,則該文件幾乎在所有方面都可能是錯誤的。
我們正在積極(每天)進行重構,這是一個非常高的優先事項。
彙編核心和彙編有什麼區別?
Assemble 新增了一個 CLI、一些內建視圖集合: pages
、 layouts
和partials
、用於解析前面內容的中間件,以及我們發現許多使用者期望的其他一些基本預設值。如果您喜歡不同的預設值,assemble-core 是一個很好的起點。
如果您想要處理範本、渲染、引擎、助理、集合等的東西,但不需要執行任務或使用檔案系統,那麼請考慮使用範本而不是 assemble-core。
我使用gulp,為什麼建議直接使用assemble,而不是用gulp運行assemble?
您可以使用 assemble 運行 gulp 插件,但反之則不然。這是因為,作為一個建置系統,assemble 可以做 gulp 不做的事情,例如處理中間件。
例如,assemble 的.src
和.dest
方法具有內建的.onStream
、 .preWrite
和.postWrite
中間件處理程序。如果您仍然希望使用 gulp 並且您的建置週期包含需要這些處理程序的中間件,則可以將 assemble-handle 外掛程式與 gulp 一起使用,以確保仍根據需要呼叫處理程序。
這是一個很長的說法,你可以找到讓 gulp 工作的方法,但你只需向你的專案添加一個額外的依賴項來完成 assemble 已經完成的事情。
gulp 和 assemble 有什麼關係?
請閱讀我們的 gulp 常見問題以獲取更多資訊。
取得 Assemble 開發的最新資訊並與專案維護者和社群成員聊天。
在 Twitter 上關注@assemblejs。
如果您喜歡 Assemble 並想發布有關它的推文,請隨時提及@assemblejs
或使用#assemble
主題標籤
閱讀並訂閱官方 Assemble 部落格。
加入官方 Slack 房間。
加入 Gitter 上的對話
告訴我們您的組裝項目
透過主演《集合》來表達你的愛吧!
在 StackOverflow 上取得實作幫助(請在問題中使用 assemble assemble
標籤)
Gitter在 Gitter 上與我們討論集合
為了最大程度地提高可發現性,插件開發人員應在透過 npm 或類似交付機制分發時修改或添加 Assemble 功能的套件上使用關鍵字assembleplugin
。
貢獻
如果您想了解有關為該專案做出貢獻的更多信息,請閱讀我們的貢獻指南。
您可能也對 @doowb 和 @jonschlinkert 的這些項目感興趣:
如果 assemble 不能滿足您的需要,您可能會對我們的朋友在 GitHub 上創建的其他一些很棒的開源專案感興趣(按字母順序排列):
靜態站點產生器
部落格框架
變更日誌條目使用以下標籤進行分類(來自 keep-a-changelog ):
added
:用於新功能changed
:用於現有功能的更改deprecated
:在即將發布的版本中刪除了曾經穩定的功能removed
:針對此版本中已刪除的已棄用功能fixed
:修復任何錯誤此變更日誌中使用的自訂標籤:
dependencies
:碰撞依賴性housekeeping
:程式碼重新組織、較小的編輯或不屬於其他類別之一的其他變更。 額外
固定的
isbinaryfile
嘗試從不存在的檔案中讀取的錯誤。 依賴關係
view
在由app
建立時以.toStream()
裝飾(相對於集合)。 依賴關係
固定的
view.stat
更改後在某些情況下view.path
為 nullview.base
對於不是從檔案系統建立的視圖並不總是正確的依賴關係
dest
處理的改進依賴關係
list
上提供的新方法依賴關係
依賴關係
.log()
方法,它也公開其他方法,例如.log.info()
、 .log.success()
等。support/docs
,以便可以將 markdown 文件建置到docs
目錄.data
方法中刪除renameKey
選項。請改用namespace
選項。 將 assemble-core 升級到 v0.22.0,以利用查找方法的修復和改進: .find
和getView
。未進行任何 API 變更。如果出現回歸,請告知我們。
List
錯誤app.getView()
和app.find()
queue
屬性的支援。有關更多詳細信息,請參閱 assemble-core。file.base
錯誤,導致在某些情況下 dest 目錄相對於 cwd 而不是 glob 父級。renameKey
在集合載入器選項上定義時並不總是使用。debug
方法和相關程式碼已被刪除node_modules
並重新安裝所有依賴項,以避免出現isRegistered is not a function
等錯誤.watch
方法,改用base-watch插件。(由 helper-changelog 產生的變更日誌)
拉取請求和星星總是受歡迎的。對於錯誤和功能請求,請建立問題。
請閱讀貢獻指南,以取得開放問題、拉取請求和編碼標準的建議。
如果 Assemble 無法滿足您的需要,請告訴我們
提交 | 貢獻者 |
---|---|
第1497章 | 永施林克特 |
第842章 | 杜布 |
11 | 安德斯·約翰遜 |
7 | 阿基馬阿吉 |
7 | 史蒂芬瓦爾特 |
4 | 平均電壓 |
4 | 彎曲者 |
2 | 偉大聖羅 |
2 | 勞貝爾丹尼爾 |
2 | 奧諾庫穆斯 |
2 | 羅布洛奇 |
2 | 史蒂文·布萊克 |
2 | 西西弗 |
2 | 艾因 |
1 | 阿桑斯 |
1 | 鮑爾卡 |
1 | 凱西G1204 |
1 | 海札克 |
1 | 莫塔里 |
1 | 批判性混搭 |
1 | 喬納西 |
1 | 約旦托馬斯 |
1 | 弗雷耶爾 |
1 | 犯人 |
1 | 普伯特查爾 |
1 | 斯克莫里森 |
1 | 腫瘤 |
1 | 泰勒霍沃斯 |
1 | 克洛基 |
喬恩‧施林克特
布萊恩·伍德沃德
版權所有 © 2017,喬恩‧施林克特。麻省理工學院
該檔案由 verb-generate-readme v0.6.0 於 2017 年 12 月 27 日產生。