Я создаю плагин 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)
Такэто нормально или это анти-паттерн?