>[success] # Plop
[Plop 推薦文章,更多使用細節讀這個文章](https://www.yuque.com/kongdepeng/rgpm60/pt15oa)
~~~
1.官網對'Plop'的介紹:把Plop稱為'micro-generator framework'。現在,我稱其為'小工具',
因為它為您提供了一種以一致的方式生成代碼或任何其他類型的純文本文件的簡單方法。
2.在開發中經常需要創建相同類型的文件,整個過程非常繁瑣,而且很難統一項目中基礎的代碼。
'Plop'是一款主要去為了創建項目中特定類型文件的小工具,有點類似 Yeoman 中的 Sub Generator,
不過它不會獨立去使用,一般我們會把 Plop 集成到項目當中用來去自動化的創建同類型的項目文件
3.簡單的說和之前的'Yeoman'相比'Yeoman'通過'yo' 來提供的'generator' 但是'Yeoman'這種創建的是
整個項目目錄結構和文件配置一類,即使也可使用'Yeoman 中的 Sub Generator'來創建小型項目結構目錄和
配置文件,是需要獨立去使用的,' Plop 集成到項目'跟項目針對性的擴展使用的
~~~
>[danger] ##### 舉個實際開發的例子
~~~
1.在多頁面開發的情況下,經常我們需要創建如下的工程目錄,站在代碼的角度來說,我們可以提供一個方法
用戶輸入指令決定文件名稱,我們根據這個名稱來生成'css,js,html'文件,甚至文件內項目通用部分內容
和'js','css' 引入,這種工作已經是在項目開發階段在做了'Yeoman'雖然也可以實現,但是導致說可能這類的
工作只會使用到'Yeoman '極少部分的api,此時就是'Plop'工具使用
├───index
│ ├─── index.css
│ ├─── index.html
│ └───index.js
├───home
│ ├─── home.css
│ ├─── home.html
│ └─── home.js
~~~
>[info] ## 使用Plop
~~~
1.關于安裝,'Plop' 是針對項目開發階段使用,一般是安裝在開發依賴包,當然也可安裝在全局隨時使用
npm install --save-dev plop -- 安裝項目到開發依賴
npm install -g plop -- 安裝項目到全局依賴
2.因為plop 集成的是Handlebars 因此要遵循Handlebars模板定義規則
~~~
>[danger] ##### 使用
~~~
1.在項目的根目錄下創建一個plopfile.js
~~~
* plopfile.js
~~~
// Plop 入口文件,需要導出一個函數
// 此函數接收一個 plop 對象,用于創建生成器任務
// plop 是一個node 工具因此這里使用node 的導出方式
module.exports = plop => {
// plop 和yeoman 一樣也提供了自己一些api接口
// 第一個參數是'Generator'名字后期就是告訴plop執行對應命令的名稱
// 第二個config對象需要包括提示和操作,其中actions 對應執行命令動作
plop.setGenerator('my-first', {
description: '使用polp創建的第一個腳手架工具指令',
prompts: [{
type: 'input',
name: 'name',
message: '創建文件的名字',
default: 'index'
}],
actions: [{
type: 'add', // 代表添加文件 可以配置其他動作指令Add,AddMany,Modify,Append
path: 'src/components/{{name}}/{{name}}.html', // 生成文件在項目位置
templateFile: 'plop-templates/index.hbs' // 因為plop 集成的是Handlebars 因此要遵循Handlebars模板定義規則
}, {
type: 'add', // 代表添加文件
path: 'src/components/{{name}}/{{name}}.css',
templateFile: 'plop-templates/index.css.hbs'
}, ]
})
// 創建更多的指令
plop.setGenerator('my-second', {
description: '使用polp創建的第二個腳手架工具指令',
prompts: [{
type: 'input',
name: 'name',
message: '創建文件的名字',
default: 'index'
}],
actions: [{
type: 'add', // 代表添加文件
path: 'src/components/{{name}}/{{name}}.html', // 生成文件在項目位置
templateFile: 'plop-templates/index.hbs' // 因為plop 集成的是
}, {
type: 'add', // 代表添加文件
path: 'src/components/{{name}}/{{name}}.css',
templateFile: 'plop-templates/index.css.hbs'
}, ]
})
}
~~~
* plop-templates 文件下創建的模板
~~~
// index.hbs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="./{{name}}.css">
</head>
<body>
<p>{{name}}</p>
</body>
</html>
~~~
>[danger] ##### 使用
~~~
npm plop <name> ,例如上面的案例我想使用的時候輸入'npm plop my-first',也可以將指令配置在pack.json中
~~~
- 工程化 -- Node
- vscode -- 插件
- vscode -- 代碼片段
- 前端學會調試
- 谷歌瀏覽器調試技巧
- 權限驗證
- 包管理工具 -- npm
- 常見的 npm ci 指令
- npm -- npm install安裝包
- npm -- package.json
- npm -- 查看包版本信息
- npm - package-lock.json
- npm -- node_modules 層級
- npm -- 依賴包規則
- npm -- install 安裝流程
- npx
- npm -- 發布自己的包
- 包管理工具 -- pnpm
- 模擬數據 -- Mock
- 頁面渲染
- 渲染分析
- core.js && babel
- core.js -- 到底是什么
- 編譯器那些術語
- 詞法解析 -- tokenize
- 語法解析 -- ast
- 遍歷節點 -- traverser
- 轉換階段、生成階段略
- babel
- babel -- 初步上手之了解
- babel -- 初步上手之各種配置(preset-env)
- babel -- 初步上手之各種配置@babel/helpers
- babel -- 初步上手之各種配置@babel/runtime
- babel -- 初步上手之各種配置@babel/plugin-transform-runtime
- babel -- 初步上手之各種配置(babel-polyfills )(未來)
- babel -- 初步上手之各種配置 polyfill-service
- babel -- 初步上手之各種配置(@babel/polyfill )(過去式)
- babel -- 總結
- 各種工具
- 前端 -- 工程化
- 了解 -- Yeoman
- 使用 -- Yeoman
- 了解 -- Plop
- node cli -- 開發自己的腳手架工具
- 自動化構建工具
- Gulp
- 模塊化打包工具為什么出現
- 模塊化打包工具(新) -- webpack
- 簡單使用 -- webpack
- 了解配置 -- webpack.config.js
- webpack -- loader 淺解
- loader -- 配置css模塊解析
- loader -- 圖片和字體(4.x)
- loader -- 圖片和字體(5.x)
- loader -- 圖片優化loader
- loader -- 配置解析js/ts
- webpack -- plugins 淺解
- eslit
- plugins -- CleanWebpackPlugin(4.x)
- plugins -- CleanWebpackPlugin(5.x)
- plugin -- HtmlWebpackPlugin
- plugin -- DefinePlugin 注入全局成員
- webapck -- 模塊解析配置
- webpack -- 文件指紋了解
- webpack -- 開發環境運行構建
- webpack -- 項目環境劃分
- 模塊化打包工具 -- webpack
- webpack -- 打包文件是個啥
- webpack -- 基礎配置項用法
- webpack4.x系列學習
- webpack -- 常見loader加載器
- webpack -- 移動端px轉rem處理
- 開發一個自己loader
- webpack -- plugin插件
- webpack -- 文件指紋
- webpack -- 壓縮css和html構建
- webpack -- 清里構建包
- webpack -- 復制靜態文件
- webpack -- 自定義插件
- wepack -- 關于靜態資源內聯
- webpack -- source map 對照包
- webpack -- 環境劃分構建
- webpack -- 項目構建控制臺輸出
- webpack -- 項目分析
- webpack -- 編譯提速優護體積
- 提速 -- 編譯階段
- webpack -- 項目優化
- webpack -- DefinePlugin 注入全局成員
- webpack -- 代碼分割
- webpack -- 頁面資源提取
- webpack -- import按需引入
- webpack -- 搖樹
- webpack -- 多頁面打包
- webpack -- eslint
- webpack -- srr打包后續看
- webpack -- 構建一個自己的配置后續看
- webpack -- 打包組件和基礎庫
- webpack -- 源碼
- webpack -- 啟動都做了什么
- webpack -- cli做了什么
- webpack - 5
- 模塊化打包工具 -- Rollup
- 工程化搭建代碼規范
- 規范化標準--Eslint
- eslint -- 擴展配置
- eslint -- 指令
- eslint -- vscode
- eslint -- 原理
- Prettier -- 格式化代碼工具
- EditorConfig -- 編輯器編碼風格
- 檢查提交代碼是否符合檢查配置
- 整體流程總結
- 微前端
- single-spa
- 簡單上手 -- single-spa
- 快速理解systemjs
- single-sap 不使用systemjs
- monorepo -- 工程
- Vue -- 響應式了解
- Vue2.x -- 源碼分析
- 發布訂閱和觀察者模式
- 簡單 -- 了解響應式模型(一)
- 簡單 -- 了解響應式模型(二)
- 簡單 --了解虛擬DOM(一)
- 簡單 --了解虛擬DOM(二)
- 簡單 --了解diff算法
- 簡單 --了解nextick
- Snabbdom -- 理解虛擬dom和diff算法
- Snabbdom -- h函數
- Snabbdom - Vnode 函數
- Snabbdom -- init 函數
- Snabbdom -- patch 函數
- 手寫 -- 虛擬dom渲染
- Vue -- minVue
- vue3.x -- 源碼分析
- 分析 -- reactivity
- 好文
- grpc -- 瀏覽器使用gRPC
- grcp-web -- 案例
- 待續