hygen是什麼?作者的介紹是:一個簡單,快速,可擴展的代碼生成器。其用途是幫助開發者自動創建模板文件的工具,旨在提高開發效率,下面就來說說怎麼在項目中使用hygen。
1、全局安裝hygen
npm i -g hygen
2、安裝成功後cd到項目目錄,然後在項目中初始化hygen
hygen init self
初始化之後項目中會多一個_templates的文件夾,generator是構建器文件夾,再下一級的文件夾名是對應創建文件時的命令,ejs.t 文件則是模板文件,詳細的後面會講解。
3、構建第一個自己的構建器,我這裏跟官方文檔一樣起名爲mygen
hygen generator new mygen
執行完上面的命令後,_templates文件夾下面就會多了一個mygen的文件夾
4、使用構建器創建第一個文件
new就是mygen文件夾下面的new文件夾,執行這條命令就會創建new文件夾下面的所有模板
hygen mygen new
執行完上面的命令後,就會多出一個app的文件夾,裏邊的hello.js就是根據 mygen>new>hello.ejs.t 爲模板生成的文件,這一點通過對比hello.js 和 hello.ejs.t 就能看出。
hello.ejs.t 文件裏的to:代表生成的文件要插入的路徑和文件(例如想要生成vue文件只需要把後綴改成.vue即可),至於模板內容只需要把文件裏的內容替換成想要的模板內容即可。
5、自定義新創建的文件名
通過 <%= key %> 可以自定義文件名,以及賦值。首先把 hello.ejs.t 文件改成下面這樣:
---
to: app/<%= folder %>/<%= name %>.js
---
const fileName = '<%= name %>'
const hello = '<%= message %>'
console.log(fileName)
console.log(hello)
然後在命令行內運行下面這段命令,其中 --name 對應的是 <%= name %> 中的name,folder、message同理。
hygen mygen new --folder testFolder --name testFile --message HelloTest
這樣就得到了一個自定義命名的 testFolder文件夾,已經文件夾裏的 testFile.js 其中 --folder testFolder --name testFile --message HelloTest 沒有先後順序
到這裏,已經可以通過簡單的命令 hygen mygen new 快速的生成模板文件,只要事先編寫不同的模板文件,就可以在項目中快速的生成不同的目錄和文件,例如vue、components、api、vuex...
交互式的構建器
爲了更好的生成不同的文件 hygen 還提供了另一種生成文件的方式,使用交互式的構建器生成目錄和文件
1、執行以下命令,創建交互式構建器:
hygen generator with-prompt mygen
通過默認的generator可以構建一個帶交互提示的構建器,然後會得到一個名爲with-prompt的文件夾,與new文件夾相比,多了一個prompt.js的文件,這個文件是用來處理交互提示以及一些操作邏輯的。
2、修改模板文件和prompt.js
首先把 hello.ejs.t 文件改成下面這樣:
---
to: src/<%= folder %>/<%= name %>.js
---
const hello = <%= name %>
console.log(hello)
注:模板文件名可自己隨意修改,如 page.ejs.t
prompt.js 改成下面這樣:
module.exports = [
{
type: 'input',
name: 'folder',
message: '請輸入文件夾名: ',
validate (value) {
if (!value.length) {
return '文件夾名不能爲空!'
}
return true
}
},
{
type: 'input',
name: 'name',
message: '請輸入文件名: ',
validate (value) {
if (!value.length) {
return '文件名不能爲空!'
}
return true
}
}
]
3、這個時候跑下面這條命令,with-prompt 爲文件夾名,這條命令的意義和上面的hygen mygen new是一樣的。
hygen mygen with-prompt
執行命令後會得到寫在prompt.js裏的問題,這裏輸入你要創建的文件夾名稱然後回車,文件名稱同理。如果輸入的文件夾已存在,則會把創建的文件插入該文件夾中,如果是文件已存在,則會提示你是否要覆蓋。
現在已經在src目錄下創建了一個testFolder了。
其中傳入模板文件的參數除了輸入的方式,還有選擇的方式:
把prompt.js 改成下面這樣:
module.exports = [
{
type: 'select',
name: 'folder',
message: '請選擇文件夾',
choices: [{ message: 'testFolder目錄', value: 'testFolder' }, { message: 'views目錄', value: 'views' }]
},
{
type: 'input',
name: 'name',
message: '請輸入文件名: ',
validate (value) {
if (!value.length) {
return '文件名不能爲空!'
}
return true
}
}
]
再次執行 hygen mygen with-prompt 便會得到下面這樣,然後選擇要插入的目錄,就可以在對應的目錄生成模板文件了。
結語:通過前期的配置,hygen能快速的幫助開發者創建各種項目目錄和文件,提高開發的效率,至於hygen要怎麼使用則需要根據實際項目去配置了。到這裏hygen的簡單使用已經介紹完了,根據官方文檔還有其他的拓展性,這個可以自行去拓展,我也會在後面慢慢的補充一些我認爲實用的東西。
以下爲擴展性內容
工具庫
hygen還內置了 inflection-js 、change-case 等工具以滿足某些要求,例如下面的 h.changeCase.isUpper(判斷大寫)、h.inflection.dasherize(將下劃線轉爲破折號)
---
to: src/<%= folder %>/<%= name %>.js
---
const folder = '<%= h.changeCase.isUpper(folder) %>'
const hello = '<%= h.inflection.dasherize(name) %>'
console.log(folder)
console.log(hello)
條件渲染
參數裏還可以使用三元運算和 if 判斷,if 的語法和工作原理 點這裏 EJS 文檔
---
to: "src/<%= folder %>/<%= name ? name : 'test' %>.js"
---
const folder = '<%= h.changeCase.isUpper(folder) %>'
const hello = '<%= h.inflection.dasherize(name) %>'
const message = 'message = ' + '<% if(message){ -%><%= message %><% } -%>'
console.log(folder)
console.log(hello)
console.log(message)