Введение
Plop — это небольшой инструмент, который экономит ваше время и помогает вашей команде создавать новые файлы с согласованностью https://plopjs.com.
с помощью Plop можно уменьшить несогласованность процесса создания нового файла в структуре папок и скелете кода. В кодовой базе большого проекта со многими участниками очень возможны несоответствия при добавлении новых функций и т. д.
кроме того, этот вид автоматизации может сэкономить время, потраченное впустую на разработку, с помощью генератора Plop файлы, которые должны быть созданы, могут создаваться массово, а не создаваться вручную один за другим.
для тех, кто знаком с ruby on rails, этот вид автоматизации создания файлов похож на скаффолдинг CLI генератора Rails, *https://guides.rubyonrails.org/v3.2/generators.html .* но Plop может создавать файл без ограничений языка программирования, хотя Plop является библиотекой узлов, ее также можно использовать для создания файлов на других языках, поэтому ее очень удобно использовать в различных проектах.
Реализация/пример
во-первых, нам нужно установить Plop в наш проект
npm install --save-dev plop
создайте файл plopfile.mjs в корневом каталоге нашего проекта, содержащий
export default function (plop) {
};
а также добавить синтаксис Plop в файл package.json
"scripts": {
"plop": "plop", // add plop
"test": "echo \\"Error: no test specified\\" && exit 1"
},
создайте новый генератор Plop, в данном случае мы создаем генератор для файла контроллера express.js.
plop.setGenerator('controller', {
description: 'plop generating controller..',
prompts: [
{
type: 'input',
name: 'name',
message: 'controller name please'
}
],
actions: [
{
type: 'add',
path: 'src/controller/{{lowerCase name}}.js',
templateFile: 'plop_templates/controller.hbs'
}
]
})
также необходимо создать файл шаблона в соответствии с желаемым форматом
plop_templates/controller.hbs
const {{name}} = require('../model/{{name}}')
class {{name}}Controller { }
module.exports = {{name}}Controller
with {{ name }} — это переменная/параметры, полученные из подсказок.
перед запуском генератора Plop, описанного выше, папка нашей структуры будет выглядеть примерно так.
- plop_template/
- controller.hbs
- plopfile.mjs
- package.json
и запустим синтаксис генератора Plop на нашем терминале
npm run plop
мы будем запрашивать ввод в соответствии с массивом подсказок и запускать действия на основе массива действий в нашем файле plopfile.mjs. https://plopjs.com/documentation/#add)
и вуаля… новый файл контроллера успешно создан.
~/Documents/exjs/plop(main*) » npm run plop aldino@Aldinos-MacBook-Pro
> [email protected] plop /Users/aldino/Documents/exjs/plop > plop
? controller name please user ✔ ++ /src/controller/user.js
============
- src/ - controller/ - user.js - plopfile.mjs - package.json
мы можем добавить больше действий в зависимости от наших потребностей в массиве действий в генераторе. например, если мы хотим, чтобы наш генератор создал файл контроллера с его тестовым файлом
actions: [
{
type: 'add',
path: 'src/controller/{{lowerCase name}}.js',
templateFile: 'plop_templates/controller.hbs'
},
{
type: 'add',
path: 'test/controller/{{lowerCase name}}.test.js',
templateFile: 'plop_templates/controller.test.hbs'
}
]
запустив тот же генератор Plop, мы напрямую создадим файл контроллера и его тестовый файл
Еще реализация..
В некоторых случаях необходимо, чтобы наш генератор мог создавать и/или пропускать создание определенных файлов. Например, мы хотим создать файл контроллера и напрямую создать файл маршрута, но иногда мы просто хотим создать файл контроллера, не создавая файл маршрута.
Plop, который в основном представляет собой javascript, безусловно, справится с этим. со следующим примером:
plop.setGenerator('controller', { description: 'plop generating controller..', prompts: [ { type: 'input', name: 'name', message: 'controller name please' }, { type: 'input', name: 'is_create_route', message: 'Fill (yes) to create route, and other to not create route' } ], actions: function(data) { let actions = [] actions.push({ type: 'add', path: 'src/controller/{{lowerCase name}}.js', templateFile: 'plop_templates/controller.hbs' }) actions.push({ type: 'add', path: 'test/controller/{{lowerCase name}}.test.js', templateFile: 'plop_templates/controller.test.hbs' })
if(data.is_create_route == "yes") { actions.push({ type: 'add', path: 'src/router/{{lowerCase name}}.js', templateFile: 'plop_templates/router.hbs' }) }
return actions } })
Plop создаст или не создаст файл маршрута в зависимости от ввода, который мы ввели в подсказках.
Заключение
автоматизация создания файлов или создание шаблонов, безусловно, помогут сэкономить время в процессе разработки и сохранить согласованность структуры папок базы кода.
Plop может приятно помочь в этом процессе, обладая большой гибкостью, настройкой, помощниками и т. д.
Репозиторий Github можно найти здесь: https://github.com/aldinofrizal/plop
Ссылка:
https://plopjs.com/documentation
https://youtube.com/playlist?list=PL6Mu1AMmTL-vR7eK-1EqewignxemucVo2