Введение

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://youtu.be/OF1PJX1f-Jc

https://youtube.com/playlist?list=PL6Mu1AMmTL-vR7eK-1EqewignxemucVo2