Условное выполнение заданий - PullRequest
0 голосов
/ 10 февраля 2019

Я создаю плагин Gulp, который требует условного выполнения задач на основе условия, сгенерированного из плагина.

Текущий метод, который я реализовал для достижения условного выполнения из того, что я понимаю, считается анти-паттерном, и я бы хотел этого избежать.

О плагине

Плагин Я создаю комплекты отдельных файловых компонентов, похожих на Vue.Каждый файл, переваренный плагином, ищет элементы DOM в переданном содержимом файла, и отсюда применяются модификации, основанные на элементе, с которым он сталкивается.Ниже приведен очень минимальный пример того, как переданные файлы настраиваются и выглядят:

hello-world.html

<style>
  .foo { }
</style>

<template>
  Hello World
</template>

<script>
  var foo = 'bar'
  console.log(foo)
</script>

В приведенном выше примере плагин извлекает содержимое внутри<template></template> теги only и установка условий для элементов style или script.

Теги <script> </script> и <style> </style> работают немного по-другому.Если вы запускаете задачу сборки, эти теги будут игнорироваться, но если вы выполняете задачу наблюдения, их содержимое будет отображаться в копии кэша, а при обнаружении изменений в плагине будет установлено условие, например: sfc.bundleScripts = true или sfc.bundleStyles = true.

Я разработал этот плагин так, чтобы вы могли импортировать отдельный файловый компонент в их относительные файлы комплектов, например:

styles.scss

@import("components/hello-world.html")

scripts.js

import HelloWorld from 'components/hello-world.html'

Этот подход позволяет мне связывать содержимое тегов <script></script> или <style></style>, как если бы они были .scss или .js файлами.Я добиваюсь этого, вызывая отдельный модуль изнутри плагина, который обрабатывает извлечение содержимого тега <style> или <script> из components/hello-world.html.

Предполагаемый анти-паттерн

Это подводит меня к анти-паттерну.В настоящее время я устанавливаю единство между тремя задачами, выполняя задачу одного файлового компонента в серии, включающей задачи scripts и styles, например:


 series(sfc, sfc_Styles, sfc_Styles)

При запуске вВ режиме просмотра задачи scripts() и styles() вызываются в series(), но выполняются только на основе условия sfc.*, установленного в плагине, очень грубый пример:


// Basic example of plugin task fn 
function sfc () {
  return src('src/components/*.html')
  .pipe(sfc.bundle())
  .pipe(dest('dest'))
}

// Basic example of conditional execution of styles 
function sfc_Styles () {
  if(sfc.bundleStyles) {
    return styles() // calls the styles task
  } 
}

// Basic example of conditional execution of scripts 
function sfc_Scripts () {
  if(sfc.bundleScripts) {
     scripts() // calls the scripts task
  } 
}

exports.components = series(sfc, sfc_Styles, sfc_Scripts)

Такэто нормально или это анти-паттерн?

1 Ответ

0 голосов
/ 10 февраля 2019

Таким образом, дальнейшее копание привело меня к следующим ответам, которые я собираюсь принять, поскольку мой текущий подход не является анти-паттерном, учитывая, что задачи Gulp 4 являются просто функциями].

В качестве ориентира я нашел следующие ответы от Github и Stack:

...