<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>gulp.js Blog</title>
        <link>https://gulpjs.com/blog</link>
        <description>gulp.js Blog</description>
        <lastBuildDate>Sat, 31 Oct 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Relaunching Our Blog]]></title>
            <link>https://gulpjs.com/blog/blog-relaunch</link>
            <guid>https://gulpjs.com/blog/blog-relaunch</guid>
            <pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Follow our self-hosted blog.]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Photograph of a red door with a hanging sign saying &amp;quot;Welcome&amp;quot;" src="https://gulpjs.com/assets/images/blog-relaunch-welcome-c0110a5281c026c7179d6b494172c231.jpg" width="960" height="811" class="img_CujE">
<em>Photo by <a href="https://unsplash.com/@robuz_74" target="_blank" rel="noopener noreferrer" class="">Robert Schulz</a> on <a href="https://unsplash.com/photos/a-red-door-with-a-welcome-sign-on-it-5aFYoU9hpw8" target="_blank" rel="noopener noreferrer" class="">Unsplash</a></em></p>
<p>Welcome to our freshly relaunched blog! You may have noticed that we are now directly hosting our blog on the <a class="" href="https://gulpjs.com/">gulpjs.com</a> domain.</p>
<p>In a world of corporations obsessed with the <a href="https://en.wikipedia.org/wiki/Enshittification" target="_blank" rel="noopener noreferrer" class="">enshittification</a> of their platforms, the gulp team is methodically moving away from platforms we don’t control. One of the easiest places to change was self-hosting the blog on our own infrastructure instead of relying on Medium.</p>
<p>We’ve migrated our old posts from Medium and plan to release a series of posts about our current development efforts leading up to v6. So please subscribe (rss, atom) with your favorite reader software to stay updated!</p>]]></content:encoded>
            <category>self-hosting</category>
        </item>
        <item>
            <title><![CDATA[That’s a Wrap!]]></title>
            <link>https://gulpjs.com/blog/gulp-developer-survey-2024-wrap-up</link>
            <guid>https://gulpjs.com/blog/gulp-developer-survey-2024-wrap-up</guid>
            <pubDate>Mon, 03 Jun 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[The Gulp Dev Survey Comes to a Close.]]></description>
            <content:encoded><![CDATA[<p>The Gulp Dev Survey Comes to a Close.</p>
<p>The Gulp Developer Survey is officially closed. We want to thank each and every one of you who completed the survey! In total, we received over 600 survey responses and are excited to review what everyone has to say.</p>
<p>Without the editors who graciously shared the survey link with their readers, we know we would not have had such a good turn out. So shout out to the following newsletters for including the Gulp Developer Survey:</p>
<p>✨ <a href="https://webweekly.email/" target="_blank" rel="noopener noreferrer" class="">Web Weekly</a> — “Your friendly web dev newsletter.”</p>
<p><img decoding="async" loading="lazy" alt="Banner for the Web Weekly newsletter" src="https://gulpjs.com/assets/images/web-weekly-banner-7289721285a37a1dfd0a5ff11e09c4a3.png" width="415" height="195" class="img_CujE"></p>
<p>✨ <a href="https://javascriptweekly.com/" target="_blank" rel="noopener noreferrer" class="">JavaScript Weekly</a> — “A newsletter of JavaScript articles, news and cool projects.”</p>
<p><img decoding="async" loading="lazy" alt="Banner for the JavaScript Weekly newsletter" src="data:image/png;base64,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" width="499" height="94" class="img_CujE"></p>
<p>✨ <a href="https://tympanus.net/codrops/collective/" target="_blank" rel="noopener noreferrer" class="">Codrops Collective</a> — “Weekly news about qualitative new projects and libraries in web development and design.”</p>
<p><img decoding="async" loading="lazy" alt="Banner for the Codrops Collective newsletter" src="https://gulpjs.com/assets/images/codrops-collective-banner-c9b8c5e79d7fceebdee280dd6946ac94.jpg" width="1200" height="349" class="img_CujE"></p>
<p>✨ <a href="https://www.therepository.email/" target="_blank" rel="noopener noreferrer" class="">The Repository</a> — “What’s happening in WordPress — and what everyone’s saying about it.”</p>
<p><img decoding="async" loading="lazy" alt="Banner for The Repository newsletter" src="data:image/png;base64,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" width="1024" height="292" class="img_CujE"></p>
<p>✨ <a href="https://cfe.dev/newsletters/jamstacked/" target="_blank" rel="noopener noreferrer" class="">JAMstacked</a> — “An email update on the evolving web development ecosystem.”</p>
<p><img decoding="async" loading="lazy" alt="Banner for the JAMStacked newsletter" src="https://gulpjs.com/assets/images/jamstacked-banner-2a29d5f14d279fdba37cdd258779b695.png" width="1400" height="475" class="img_CujE"></p>
<p>✨ <a href="https://console.dev/latest" target="_blank" rel="noopener noreferrer" class="">Console</a> — “A free weekly email digest of the best tools for developers.”</p>
<p><img decoding="async" loading="lazy" alt="Banner for the Console newsletter" src="data:image/png;base64,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" width="426" height="117" class="img_CujE"></p>
<p>✨ <a href="https://thewpweekly.com/" target="_blank" rel="noopener noreferrer" class="">The WP Weekly</a> — “The Weekly Newsletter for WordPress Professionals.”</p>
<p><img decoding="async" loading="lazy" alt="Banner for The WP Weekly newsletter" src="data:image/jpeg;base64,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" width="445" height="128" class="img_CujE"></p>
<p>If you’re missing out on developer happenings, we highly recommend checking out these wonderful sources!</p>
<p>Over the next few weeks, I will be cleaning and analyzing the data for the Gulp team. We will be sharing the results here as soon as they are finalized, so keep your eyes peeled for the next blog post if you consider yourself a #dataisbeautiful nerd like myself. 🤓</p>
<p><img decoding="async" loading="lazy" alt="Photo of a red greeting card with the words &amp;quot;Thank You&amp;quot;" src="https://gulpjs.com/assets/images/gulp-survey-wrap-e47dcc00a2da53f93b92aa4a70a5c47f.jpg" width="1400" height="1050" class="img_CujE">
<em>Photo by <a href="https://unsplash.com/@aaronburden" target="_blank" rel="noopener noreferrer" class="">Aaron Burden</a> on <a href="https://unsplash.com/" target="_blank" rel="noopener noreferrer" class="">Unsplash</a></em></p>]]></content:encoded>
            <category>JavaScript</category>
            <category>Gulp</category>
            <category>Gulpjs</category>
            <category>Nodejs</category>
            <category>Surveys</category>
        </item>
        <item>
            <title><![CDATA[Introducing the Gulp Developer Survey]]></title>
            <link>https://gulpjs.com/blog/gulp-developer-survey-2024</link>
            <guid>https://gulpjs.com/blog/gulp-developer-survey-2024</guid>
            <pubDate>Mon, 06 May 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Take the survey before May 31st.]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Stylized banner image saying &amp;quot;We want to hear from you. Survey closes May 31st.&amp;quot;" src="https://gulpjs.com/assets/images/gulp-survey-banner-7b6f9018830f1dbb9e6cb4583e751efa.png" width="980" height="450" class="img_CujE">
<em><a href="https://www.surveyhero.com/c/ctrpnqkr" target="_blank" rel="noopener noreferrer" class="">Take the survey before May 31st</a></em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="keep-it-simple-">Keep it Simple 🤝<a href="https://gulpjs.com/blog/gulp-developer-survey-2024#keep-it-simple-" class="hash-link" aria-label="Direct link to Keep it Simple 🤝" title="Direct link to Keep it Simple 🤝" translate="no">​</a></h2>
<p>Gulp has come a long way since its humble beginnings a decade ago. In that time, gulp has remained dedicated to simplicity despite the competition for “one tool to build them all.” The gulp team has a clear mission, and they want to do it well. The v5 release ushers in a new phase of gulp development, and to that end, they’ve decided to work with me to seek feedback from the gulp community. Many tech communities for tools, frameworks, and beyond host a “State of” survey regularly, and gulp is now joining the fray.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="who-am-i-️">Who Am I? 🙋🏽‍♀️<a href="https://gulpjs.com/blog/gulp-developer-survey-2024#who-am-i-%EF%B8%8F" class="hash-link" aria-label="Direct link to Who Am I? 🙋🏽‍♀️" title="Direct link to Who Am I? 🙋🏽‍♀️" translate="no">​</a></h2>
<p>Hi, I’m Claire! I recently started working with the gulp team to guide them through creating, deploying, and analyzing their developer survey. I have a background in academia as well as non-profit education and leadership. I am excited to be applying my research skills to the needs of the gulp team as I enter the open source realm.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-survey-️">The Survey ✍️<a href="https://gulpjs.com/blog/gulp-developer-survey-2024#the-survey-%EF%B8%8F" class="hash-link" aria-label="Direct link to The Survey ✍️" title="Direct link to The Survey ✍️" translate="no">​</a></h2>
<p>We invite you to help us explore the needs of the gulp community above and beyond the issues on GitHub by completing the Gulp Developer Survey before May 31st. Your responses to the survey will provide the gulp team with valuable insights in future directions, features, and long-term sustainability.</p>
<blockquote>
<p><strong>Quick Facts</strong></p>
<p>✨ The Gulp Developer Survey is available on desktop, tablet, and mobile.</p>
<p>✨ The survey is anonymous.</p>
<p>✨ It takes the average participant ~15 minutes to complete the survey.</p>
<p>✨ We’re inviting responses from everyone: current users, previous users, professional users, new or interested users, and all folks in between.</p>
<p>✨ Most questions are multiple choice; however, there are a few open ended questions and we invite you to use those to share your ideas with the team.</p>
<p>✨ There is only one required question, so all other questions are optional.</p>
<p>✨ This year’s survey is only available in English, but we’ve included a question to understand what other languages our global community needs for the future.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="opt-in-or-dont-">Opt-In (or don’t 👍)<a href="https://gulpjs.com/blog/gulp-developer-survey-2024#opt-in-or-dont-" class="hash-link" aria-label="Direct link to Opt-In (or don’t 👍)" title="Direct link to Opt-In (or don’t 👍)" translate="no">​</a></h2>
<p>At the end of the survey, you will be redirected to a page to collect an email address if you are interested in any follow-up participation. This is completely optional and is not connected to the survey to keep your responses anonymous. It is a space to opt-in to contact if we decide to host more personal feedback sessions such as focus groups or interviews. Numbers only get us so far and we recognize how tedious open ended questions can get, which is why we limited them. Regardless, we totally understand if you don’t want your email on another list.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="final-words-️">Final Words 🗺️<a href="https://gulpjs.com/blog/gulp-developer-survey-2024#final-words-%EF%B8%8F" class="hash-link" aria-label="Direct link to Final Words 🗺️" title="Direct link to Final Words 🗺️" translate="no">​</a></h2>
<p>The last day to complete the Gulp Developer Survey is May 31st. We encourage you to share it out to your communities however you please. In the spirit of open source, <em>we really can’t do this without you!</em> So whether you use the new version, an old version, or have moved away from gulp entirely, we hope you’ll take the time to contribute to the project’s future direction. Once the results are collected and analyzed, we’ll share them out with everyone here on the blog. We are excited for the ideas your feedback will bring, and we look forward to going on this adventure with you.</p>
<p><strong><a href="https://www.surveyhero.com/c/ctrpnqkr" target="_blank" rel="noopener noreferrer" class="">TAKE THE SURVEY HERE</a></strong></p>]]></content:encoded>
            <category>JavaScript</category>
            <category>Gulp</category>
            <category>Gulpjs</category>
            <category>Nodejs</category>
            <category>Surveys</category>
        </item>
        <item>
            <title><![CDATA[Announcing Gulp v5]]></title>
            <link>https://gulpjs.com/blog/announcing-gulp-5</link>
            <guid>https://gulpjs.com/blog/announcing-gulp-5</guid>
            <pubDate>Thu, 28 Mar 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[It’s been a long road to gulp 5, but we’re finally here!]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Photo of a small gift wrapped in red paper" src="https://gulpjs.com/assets/images/gulp-5-announcement-69cbae38f8549c96f7b476b38ff29b39.jpg" width="1400" height="933" class="img_CujE">
<em>Photo by <a href="https://unsplash.com/@leekos" target="_blank" rel="noopener noreferrer" class="">Kostiantyn Li</a> on <a href="https://unsplash.com/" target="_blank" rel="noopener noreferrer" class="">Unsplash</a></em></p>
<p>It’s been a long road to gulp 5, but we’re finally here! This release contains four years worth of work on over 60 projects. Together, the team has closed over 200 issues and pull requests. 🤯</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="streamx">Streamx<a href="https://gulpjs.com/blog/announcing-gulp-5#streamx" class="hash-link" aria-label="Direct link to Streamx" title="Direct link to Streamx" translate="no">​</a></h2>
<p>From the very beginning, gulp has been built around streams. In gulp 5, we’ve switched over to <a href="https://github.com/mafintosh" target="_blank" rel="noopener noreferrer" class="">mafintosh’s</a> excellent <a href="https://github.com/mafintosh/streamx" target="_blank" rel="noopener noreferrer" class="">streamx</a> library. Streamx has many advantages over Node.js core streams, including handling both object and buffer mode transparently and error handling on the <code>pipe()</code> function.</p>
<p>We hope to find time to do more writing about this delightful stream implementation, but most users shouldn’t notice a difference because streamx strives for compatibility with Node.js core streams. We want to thank Mathias for his help and bug fixes throughout the development of gulp 5! Please consider <a href="https://github.com/sponsors/mafintosh" target="_blank" rel="noopener noreferrer" class="">sponsoring</a> his work.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dependencies">Dependencies<a href="https://gulpjs.com/blog/announcing-gulp-5#dependencies" class="hash-link" aria-label="Direct link to Dependencies" title="Direct link to Dependencies" translate="no">​</a></h2>
<p>A primary focus of this release was reducing our dependency tree and consolidating it to mostly things we maintained. Many dependencies we previously used became unmaintained since gulp 4 was released, so we’ve either removed them or taken on maintenance responsibilities.</p>
<p>The <a href="https://github.com/gulpjs" target="_blank" rel="noopener noreferrer" class="">gulpjs</a> GitHub organization has grown to over 70 repositories. This fine-grain separation allows us to make small fixes quickly, and many other projects can rely on a subset of our packages. However, the trade-off is that it takes awhile for us to make sweeping changes across the project.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="breaking-changes">Breaking changes<a href="https://gulpjs.com/blog/announcing-gulp-5#breaking-changes" class="hash-link" aria-label="Direct link to Breaking changes" title="Direct link to Breaking changes" translate="no">​</a></h2>
<p>It wouldn’t be a SemVer major release without breaking changes. We hope these breaking changes cause little or no problems when users upgrade, but you should be aware of what has changed.</p>
<p>With such a large release, I’m only scraping the surface on the changes here, so please check out both our <a href="https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md#500-2024-03-25" target="_blank" rel="noopener noreferrer" class="">combined changelog</a> and individual <a href="https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md#individual-changelogs" target="_blank" rel="noopener noreferrer" class="">project changelogs</a> if you encounter anything that seems different.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="stream-encoding">Stream encoding<a href="https://gulpjs.com/blog/announcing-gulp-5#stream-encoding" class="hash-link" aria-label="Direct link to Stream encoding" title="Direct link to Stream encoding" translate="no">​</a></h3>
<p>Our streams now default to UTF-8 encoding. Previously, our streams took whatever data was emitted without considering any encoding. However, in this release, we resolved a 10 year old <a href="https://github.com/gulpjs/vinyl-fs/issues/23" target="_blank" rel="noopener noreferrer" class="">issue</a> to support custom encodings and we default these to UTF-8. Most usage of gulp won’t need to change anything, but certain plugins may produce non-UTF-8 output and you’ll need to set <code>{ encoding: false }</code> on your gulp streams.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="globs">Globs<a href="https://gulpjs.com/blog/announcing-gulp-5#globs" class="hash-link" aria-label="Direct link to Globs" title="Direct link to Globs" translate="no">​</a></h3>
<p>We’ve also standardized our globbing library across all APIs. Previously, <code>src()</code> used the node-glob library and <code>watch()</code> used the anymatch library via chokidar. Over the years, we’ve had many issues opened because certain globs didn’t work the same between these functions. As of gulp 5, we consistently use anymatch for glob support.</p>
<p>Additionally, we no longer support “ordered globs”. An “ordered glob” was the ability to apply globs in order, such that a negative glob could be overridden by a positive glob that came later in the array. This isn’t common in other globbing libraries, so all negative globs will filter paths from all positive globs to standardize with the ecosystem. If you need ordered streams, we provide the <a href="https://github.com/gulpjs/ordered-read-streams" target="_blank" rel="noopener noreferrer" class="">ordered-read-streams</a> library.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cli">CLI<a href="https://gulpjs.com/blog/announcing-gulp-5#cli" class="hash-link" aria-label="Direct link to CLI" title="Direct link to CLI" translate="no">​</a></h3>
<p>We’ve added loaders for <code>swc</code>, <code>esbuild</code>, and <code>sucrase</code>. A lot of users asked us to support <code>.mjs</code> and <code>.cjs</code> extensions, so both of those are available now. In streamlining our dependency tree, we’ve removed a lot of legacy and deprecated loaders. If you were using some of the more obscure loaders we supported, you may need to change to something more modern.</p>
<p>We’ve finally removed the <code>--verify</code> flag since we stopped maintaining the plugin banlist a long time ago, and we needed to rename <code>--require</code> to <code>--preload</code> to avoid conflicting with a Node.js flag.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="logging">Logging<a href="https://gulpjs.com/blog/announcing-gulp-5#logging" class="hash-link" aria-label="Direct link to Logging" title="Direct link to Logging" translate="no">​</a></h3>
<p>Any plugins using <code>gulplog</code> will need to upgrade from v1 to v2 and we’ll emit a deprecation warning if v1 is used.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="node-support">Node Support<a href="https://gulpjs.com/blog/announcing-gulp-5#node-support" class="hash-link" aria-label="Direct link to Node Support" title="Direct link to Node Support" translate="no">​</a></h2>
<p>We’ve long said that gulp is stable software, and we care about supporting as many users as possible. Gulp 4 had an explicit goal of supporting users on Node.js v0.10 because it was widely used at the time of release. Ten years later, the platform has grown and JavaScript has evolved, Node.js now has new stable releases every 6 months with an LTS duration of 30 months on any version. These new versions have features we want to leverage to make gulp better and even more stable, so we’ve dropped support for any version of Node.js below v10.13.0.</p>
<p>Constraining our supported Node.js version has allowed us to drop a lot of platform and JavaScript shims from our dependency tree. A lot of these have gone unmaintained or cause issues to be raised by scanners. We’re still supporting a version of Node.js released in 2018 (and outside of the LTS window) in hope that all our users can upgrade to gulp 5 smoothly.</p>
<p>Finally, we’ve had a fair bit of churn on our infrastructure between v3, v4, and v5 because we have long considered Windows, Mac, and Linux to be priority platforms. It took a long time to find a continuous integration service that consistently supported all these operating systems and was easy to use. We’ve spent considerable time stabilizing our infrastructure around GitHub Actions, which has support for our primary targets and allows us to leverage tools like <a href="https://github.com/google-github-actions/release-please-action" target="_blank" rel="noopener noreferrer" class="">release-please</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="onward">Onward<a href="https://gulpjs.com/blog/announcing-gulp-5#onward" class="hash-link" aria-label="Direct link to Onward" title="Direct link to Onward" translate="no">​</a></h2>
<p>There is always more work to be done. In the coming weeks, I’ll be triaging our <a href="https://github.com/orgs/gulpjs/projects/5/views/1" target="_blank" rel="noopener noreferrer" class="">post-v5 project board</a> and creating a discussion for non-breaking follow up work. We plan to keep gulp 5 stable for a while before we begin planning the next major version, which will allow us to patch any problems that come up.</p>
<p>We’re also putting together a survey to get feedback from the broader community. Keep an eye out for our announcement around May.</p>
<p>For now, we hope you enjoy the new release and welcome you to contribute to the project or <a href="https://github.com/sponsors/gulpjs" target="_blank" rel="noopener noreferrer" class="">sponsor</a> our work!</p>]]></content:encoded>
            <category>JavaScript</category>
            <category>Gulp</category>
            <category>Gulpjs</category>
            <category>Nodejs</category>
        </item>
        <item>
            <title><![CDATA[🎉 Version 4.0 Now Default 🎉]]></title>
            <link>https://gulpjs.com/blog/gulp-4-now-default</link>
            <guid>https://gulpjs.com/blog/gulp-4-now-default</guid>
            <pubDate>Mon, 10 Dec 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[Today, gulp v4 is being promoted from “next” to “latest” which means it will be installed by default when you run “npm install gulp”.]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Screenshot of gulp&amp;#39;s npm website showing 4.0.0 as the latest version" src="https://gulpjs.com/assets/images/gulp-4-now-default-9f122c19fadbca6441c4fa581c1714ed.png" width="1400" height="641" class="img_CujE"></p>
<p>For the past year, version 4.0 has been <a href="https://www.npmjs.com/package/gulp" target="_blank" rel="noopener noreferrer" class="">published to npm</a> and could be installed using <code>npm install gulp@next</code>. Today, it’s being promoted from “next” to “latest” which means it will be installed by default when you run <code>npm install gulp</code>. With this, all previous versions are <em>soft</em> deprecated and will become <em>hard</em> deprecated in the coming months.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-new-in-40">What’s new in 4.0?!<a href="https://gulpjs.com/blog/gulp-4-now-default#whats-new-in-40" class="hash-link" aria-label="Direct link to What’s new in 4.0?!" title="Direct link to What’s new in 4.0?!" translate="no">​</a></h2>
<ul>
<li class="">The task system was rewritten from the ground-up, allowing task composition using <code>series()</code> and <code>parallel()</code> methods</li>
<li class="">The watcher was updated, now using chokidar (no more need for gulp-watch!), with feature parity to our task system</li>
<li class="">First-class support was added for incremental builds using <code>lastRun()</code></li>
<li class="">A <code>symlink()</code> method was exposed to create symlinks instead of copying files</li>
<li class="">Built-in support for sourcemaps was added — the gulp-sourcemaps plugin is no longer necessary!</li>
<li class="">Task registration of exported functions — using node or ES exports — is now recommended</li>
<li class="">Custom registries were designed, allowing for shared tasks or augmented functionality</li>
<li class="">Stream implementations were improved, allowing for better conditional and phased builds</li>
</ul>
<p>We’ve written a new <a class="" href="https://gulpjs.com/docs/en/getting-started/quick-start">Getting Started guide</a> and <a class="" href="https://gulpjs.com/docs/en/api/concepts">API docs</a> to smooth the transition between versions. We hoped to have updated recipes, advanced topics, and a migration guide written before this release, but have yet to secure funding to finish them.</p>
<p>If your company is interested in funding the future of gulp documentation, <a href="mailto:team@gulpjs.com" target="_blank" rel="noopener noreferrer" class="">let us know</a>!</p>]]></content:encoded>
            <category>JavaScript</category>
            <category>Gulp</category>
            <category>Gulpjs</category>
        </item>
        <item>
            <title><![CDATA[Interview with Blaine Bublitz]]></title>
            <link>https://gulpjs.com/blog/inteview-with-blaine-bublitz</link>
            <guid>https://gulpjs.com/blog/inteview-with-blaine-bublitz</guid>
            <pubDate>Fri, 19 Jan 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[With the release of gulp 4, I thought you all might be interested in hearing about it from the lead maintainer!]]></description>
            <content:encoded><![CDATA[<p>With the release of gulp 4, I thought you all might be interested in hearing about it from the lead maintainer!</p>
<p><img decoding="async" loading="lazy" alt="Blaine posing at Machu Picchu" src="https://gulpjs.com/assets/images/blaine-interview-c0feecb2c2d0a9363503332c238ee274.jpg" width="1400" height="919" class="img_CujE">
<em>Working on gulp in the Andes.</em></p>
<p><strong>Congratulations on the Gulp release! What would you say your favorite feature is?</strong></p>
<p>Thanks!</p>
<p>Oh, wow — there’s just so much! Most people will really enjoy and benefit from <code>gulp.series</code> and <code>gulp.parallel</code>; however, I really like <a href="https://github.com/gulpjs/gulp#sample-gulpfilejs" target="_blank" rel="noopener noreferrer" class="">exporting tasks</a> and <a href="https://github.com/gulpjs/gulp#incremental-builds" target="_blank" rel="noopener noreferrer" class="">incremental builds</a>.</p>
<p>I’m going to be giving a talk in February about all the new features; watch the gulp <a href="https://twitter.com/gulpjs" target="_blank" rel="noopener noreferrer" class="">twitter</a> for the slides in a few weeks.</p>
<p><strong>It’s been in development about 3 years. What took so long?</strong></p>
<p>For a lot of the development time, I’ve been the only person working on it. Within the last year or so, a few people (shoutout to <a href="https://github.com/erikkemperman" target="_blank" rel="noopener noreferrer" class="">erikkemperman</a>, <a href="https://github.com/sttk" target="_blank" rel="noopener noreferrer" class="">sttk</a>, and the rest of our core contributors) have come in to help out on some of the stickiest problems. They’ve also really kept me motivated.</p>
<p>Working on something this big, by myself, it’s really easy to burn out. This has pretty much been my only (unpaid) job for a year. I definitely burnt out multiple times during the development process and had to step away. It’s much more enjoyable to work on a project when other community members are involved.</p>
<p>Gulp is always looking for contributors. Soon, we’ll be rolling out a process to onboard people to the core team to take on parts of the project.</p>
<p><strong>Open Source is driven by community involvement. What do you need help with right now?</strong></p>
<p>We REALLY need help with documentation. That’s our biggest thing right now. All of our dependencies have been fully documented, but none of it has been pulled into the main repo &amp; contextualized for gulp.</p>
<p>Of course, there are some bugs that are being sorted out. I just fixed a frustrating one this week — you shouldn’t see “Premature Close” errors anymore. If you encounter a bug, definitely let us know, with as much detail as possible.</p>
<p><a href="https://github.com/demurgos" target="_blank" rel="noopener noreferrer" class="">Demurgos</a> and other community members have made a ton of progress on the <a href="https://github.com/gulpjs/gulp-util/issues/143" target="_blank" rel="noopener noreferrer" class="">gulp-util migration</a>. But there’s still a lot of work to do because many plugins don’t function properly with gulp 4. <em>(Editor’s Note: see <a class="" href="https://gulpjs.com/blog/problem-with-gulp-util">The Problem with gulp-util</a> to help out.)</em></p>
<p><strong>When I install gulp, I get version 3.9.1. Why don’t I get 4.0.0 by default?</strong></p>
<p>While it’s published to npm, you have to use the command <code>npm install gulp@next</code> to get 4.0. There are going to be migration pains, so we didn’t want to install it by default for a brand new user. Before we make it the default, I’d like to have an official migration guide in place and do a full review and/or rewrite of the docs.</p>
<p><strong>When will it install by default?</strong></p>
<p>I don’t have any timelines because documentation is very hard to get right. <a href="https://github.com/SomethingNew71" target="_blank" rel="noopener noreferrer" class="">SomethingNew71</a> is working on website improvements that will display our docs so you don’t have to read from the markdown files.</p>
<p><strong>Gulp is a combination of small libraries. Did you write any new ones that the world should know about?</strong></p>
<p>Yeah! I’m really happy with a library that I created a while ago called <a href="https://github.com/gulpjs/async-done" target="_blank" rel="noopener noreferrer" class="">async-done</a>. It’s really cool because it allows us to handle all sorts of different types of async operations uniformly. This module is what enables you to return promises, streams, or observables, among other things, from gulp tasks and orchestrate whether they should be run in series or parallel. But it doesn’t just apply to gulp; you can use it with things like the <code>async</code> library on npm. There are already a handful of non-gulp projects using <code>async-done</code> and I hope others adopt it.</p>
<p><strong>If I don’t have the time or technical prowess to help out with code or docs, how else can I contribute to make sure gulp thrives?</strong></p>
<p>We have an <a href="https://opencollective.com/gulpjs" target="_blank" rel="noopener noreferrer" class="">Open Collective</a> where anyone can donate! We have things like a t-shirt tier and even display the top 10 donors on our <a class="" href="https://gulpjs.com/">website</a>. So there are benefits for you and/or your employer to donate.</p>
<p><strong>Thanks <a href="https://github.com/phated" target="_blank" rel="noopener noreferrer" class="">Blaine</a>!</strong></p>]]></content:encoded>
            <category>JavaScript</category>
            <category>Gulp</category>
            <category>Gulpjs</category>
            <category>Open Collective</category>
            <category>Open Source</category>
        </item>
        <item>
            <title><![CDATA[The Problem with gulp-util]]></title>
            <link>https://gulpjs.com/blog/problem-with-gulp-util</link>
            <guid>https://gulpjs.com/blog/problem-with-gulp-util</guid>
            <pubDate>Wed, 27 Dec 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[A little postmortem.]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Deprecation message for gulp-util displayed in terminal" src="https://gulpjs.com/assets/images/problem-with-gulp-util-519ee0685154c3fbc3b847ea410522a6.png" width="912" height="265" class="img_CujE">
<em>Seeing this message?</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-little-postmortem">A little postmortem<a href="https://gulpjs.com/blog/problem-with-gulp-util#a-little-postmortem" class="hash-link" aria-label="Direct link to A little postmortem" title="Direct link to A little postmortem" translate="no">​</a></h2>
<p>Last week we made gulp v4.0.0-alpha.3 available on GitHub and people are excited! We expected it to be <a href="https://github.com/gulpjs/gulp/commit/99bdc9ead25ff02dd2309991eea3ebdb60ab8080" target="_blank" rel="noopener noreferrer" class="">breaking</a>, but we didn’t realize the far reaching impact of the changes. This is due to 6,752 modules that depend on gulp-util; many of which utilize an extremely outdated version of Vinyl.</p>
<p>Help us fix it using the steps <a href="https://gulpjs.com/blog/problem-with-gulp-util#help-us-fix-the-ecosystem" class="">below</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-deprecation-now">Why deprecation now?<a href="https://gulpjs.com/blog/problem-with-gulp-util#why-deprecation-now" class="hash-link" aria-label="Direct link to Why deprecation now?" title="Direct link to Why deprecation now?" translate="no">​</a></h2>
<p>We’ve been planning to deprecate gulp-util since <a href="https://github.com/gulpjs/gulp/issues/360" target="_blank" rel="noopener noreferrer" class="">2014</a> because it’s just grab-bag of modules. Why would you want to download the <a href="https://github.com/gulpjs/gulp-util/blob/master/index.js#L9" target="_blank" rel="noopener noreferrer" class="">beeper</a> module if you’re only using gulp-util for logging? It drastically increases the download size of plugins and gulp itself. We had hoped people would transition to smaller modules, but it seems everyone continued with the status quo.</p>
<p>We planned to deprecate using an easier transition path, but last week’s changes proved it’s a bigger problem than we anticipated. The outdated Vinyl dependency is incompatible, but still used by many plugins. However, v2 of Vinyl won’t ship with gulp-util because we want plugin authors to transition to individual modules.</p>
<p>This has lead us to flag the module on npm with a warning — not the elegant transition we had hoped. You’ll be notified of the deprecation when gulp-util is installed by one of your plugins, but you won’t know which plugin is causing the warning until you follow the fix below.</p>
<p>It’s possible that a plugin using gulp-util isn’t broken if it’s not using the <code>gutil.File</code> <a href="https://github.com/gulpjs/gulp-util#new-fileobj" target="_blank" rel="noopener noreferrer" class="">API</a>. While not as urgent, the plugin author should still transition away from gulp-util.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="help-us-fix-the-ecosystem">Help us fix the ecosystem<a href="https://gulpjs.com/blog/problem-with-gulp-util#help-us-fix-the-ecosystem" class="hash-link" aria-label="Direct link to Help us fix the ecosystem" title="Direct link to Help us fix the ecosystem" translate="no">​</a></h2>
<p>Using these steps, you can help plugin authors migrate away from gulp-util.</p>
<ol>
<li class="">Run <code>npm ls gulp-util</code> to get the list of plugins dependent on it.</li>
<li class="">For each dependent plugin, run <code>npm issues {PLUGIN NAME}</code> which will open their issue tracker.</li>
<li class="">Open an issue or pull request to remove gulp-util using the following API replacements:</li>
</ol>
<ul>
<li class=""><code>gutil.File</code> =&gt; <a href="https://www.npmjs.com/package/vinyl" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/vinyl</a></li>
<li class=""><code>gutil.replaceExtension</code> =&gt; The <code>.extname</code> property on Vinyl objects or <a href="https://www.npmjs.com/package/replace-ext" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/replace-ext</a></li>
<li class=""><code>gutil.colors</code> =&gt; <a href="https://www.npmjs.com/package/ansi-colors" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/ansi-colors</a></li>
<li class=""><code>gutil.date</code> =&gt; <a href="https://www.npmjs.com/package/date-format" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/date-format</a></li>
<li class=""><code>gutil.log</code> =&gt; <a href="https://www.npmjs.com/package/fancy-log" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/fancy-log</a></li>
<li class=""><code>gutil.template</code> =&gt; <a href="https://www.npmjs.com/package/lodash.template" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/lodash.template</a></li>
<li class=""><code>gutil.env</code> =&gt; <a href="https://www.npmjs.com/package/minimist" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/minimist</a></li>
<li class=""><code>gutil.beep</code> =&gt; <a href="https://www.npmjs.com/package/beeper" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/beeper</a></li>
<li class=""><code>gutil.noop</code> =&gt; <a href="https://www.npmjs.com/package/through2" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/through2</a></li>
<li class=""><code>gutil.isStream</code> =&gt; Use the <code>.isStream()</code> method on Vinyl objects</li>
<li class=""><code>gutil.isBuffer</code> =&gt; Use the <code>.isBuffer()</code> method on Vinyl objects</li>
<li class=""><code>gutil.isNull</code> =&gt; Use the <code>.isNull()</code> method on Vinyl objects</li>
<li class=""><code>gutil.linefeed</code> =&gt; Use the string <code>'\n'</code> in your code</li>
<li class=""><code>gutil.combine</code> =&gt; <a href="https://www.npmjs.com/package/multipipe" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/multipipe</a></li>
<li class=""><code>gutil.buffer</code> =&gt; <a href="https://www.npmjs.com/package/list-stream" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/list-stream</a></li>
<li class=""><code>gutil.PluginError</code> =&gt; <a href="https://www.npmjs.com/package/plugin-error" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/plugin-error</a></li>
</ul>]]></content:encoded>
            <category>JavaScript</category>
            <category>Gulp</category>
            <category>Gulpjs</category>
            <category>Gulp Util</category>
            <category>Vinyl</category>
        </item>
        <item>
            <title><![CDATA[Gulp Sips: How We Use Streams]]></title>
            <link>https://gulpjs.com/blog/gulp-sips-streams</link>
            <guid>https://gulpjs.com/blog/gulp-sips-streams</guid>
            <pubDate>Tue, 31 Oct 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[Explanation and tips for gulp streams.]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Gulpfile showing many streams piped together" src="https://gulpjs.com/assets/images/gulp-sips-streams-fafcf0b25792845f5231b464209b6beb.png" width="997" height="409" class="img_CujE">
<em>Plugins strictly spooky.</em></p>
<p><em>This is part of our Gulp Sips series: bringing you easily-digestible bits of information on our advanced or unknown features.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="two-types-of-streams">Two Types of Streams<a href="https://gulpjs.com/blog/gulp-sips-streams#two-types-of-streams" class="hash-link" aria-label="Direct link to Two Types of Streams" title="Direct link to Two Types of Streams" translate="no">​</a></h2>
<p>In Node, streams can operate in one of two modes; for the purposes of gulp, the two modes are incompatible.</p>
<ul>
<li class="">Buffer mode: Operates exclusively on buffered data. If we stream a file in this mode, it would only contain the content of the file. We’d even lose the filename.</li>
<li class="">Object mode: Accepts any object flowing through it. A file streamed in object mode can contain all sorts of metadata (filename, stats, etc.), along with the content.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="benefits-of-object-mode">Benefits of Object Mode<a href="https://gulpjs.com/blog/gulp-sips-streams#benefits-of-object-mode" class="hash-link" aria-label="Direct link to Benefits of Object Mode" title="Direct link to Benefits of Object Mode" translate="no">​</a></h2>
<p>In buffer mode, using something like <code>fs.createReadStream('index.js')</code>, you’d have to operate on a singular file.</p>
<p>Instead, we utilize streams in object mode so we can operate on multiple files using a single stream. For example, <code>gulp.src('*.js')</code> reads all files ending in <code>.js</code> and emits each as an object on the stream.</p>
<p>For every file, we track a lot of metadata along with the content. This allows plugins to operate upon any of that metadata before we write it out to disk.</p>
<p>There are ways to convert between types, but they require external modules, like <a href="https://www.npmjs.com/package/vinyl-source-stream" target="_blank" rel="noopener noreferrer" class="">vinyl-source-stream</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="utilizing-gulp-plugins">Utilizing Gulp Plugins<a href="https://gulpjs.com/blog/gulp-sips-streams#utilizing-gulp-plugins" class="hash-link" aria-label="Direct link to Utilizing Gulp Plugins" title="Direct link to Utilizing Gulp Plugins" translate="no">​</a></h2>
<p>Every gulp plugin should be a Transform stream in object mode. These streams understand and operate on gulp’s data, while streams operating in buffer mode would throw an error.</p>
<p>Generally, a gulp stream begins with <code>gulp.src()</code> and terminates with <code>gulp.dest()</code>. For best results, streams between should be a gulp plugin or a stream that understands <a href="https://github.com/gulpjs/vinyl#what-is-vinyl" target="_blank" rel="noopener noreferrer" class="">Vinyl</a> objects.</p>]]></content:encoded>
            <category>JavaScript</category>
            <category>Gulp Sips</category>
            <category>Gulp</category>
            <category>Gulpjs</category>
            <category>Streams</category>
        </item>
        <item>
            <title><![CDATA[Gulp Sips: Custom Task Metadata]]></title>
            <link>https://gulpjs.com/blog/gulp-sips-custom-metadata</link>
            <guid>https://gulpjs.com/blog/gulp-sips-custom-metadata</guid>
            <pubDate>Wed, 16 Aug 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[Task descriptions and flags.]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Gulp task names with descriptions and flags displayed in terminal" src="https://gulpjs.com/assets/images/gulp-sips-custom-metadata-9e28823230cffcfbf86e99fdc7c19d90.png" width="1117" height="277" class="img_CujE"></p>
<p><em>This is part of our Gulp Sips series: bringing you easily-digestible bits of information on our advanced or unknown features.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="descriptions-and-flags">Descriptions and Flags<a href="https://gulpjs.com/blog/gulp-sips-custom-metadata#descriptions-and-flags" class="hash-link" aria-label="Direct link to Descriptions and Flags" title="Direct link to Descriptions and Flags" translate="no">​</a></h2>
<p>Our users frequently requested the ability to add descriptions to their gulp tasks. The suggested solution was to add a method like <code>gulp.description()</code>; however, we didn’t want to expand our API surface and wanted to support documenting custom flags.</p>
<p>We searched for a more elegant solution and found the most flexible option was attaching static properties to task functions containing the custom metadata. So, you can leverage existing language features instead of custom APIs. It also allows us to support other types of metadata in the future.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="supported-properties">Supported Properties<a href="https://gulpjs.com/blog/gulp-sips-custom-metadata#supported-properties" class="hash-link" aria-label="Direct link to Supported Properties" title="Direct link to Supported Properties" translate="no">​</a></h2>
<ul>
<li class=""><code>.description</code>: Assign a string description to your task function.</li>
</ul>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">clean</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> … </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">clean</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token property-access">description</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'Cleans up generated files.'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></div></code></pre></div></div>
<ul>
<li class=""><code>.flags</code>: Assign an object of flags to your task function. Each key should be a flag and its value should be the description of that flag.</li>
</ul>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">build</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> … </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">build</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token property-access">flags</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token string-property property">'--prod'</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'Builds in production mode.'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="put-it-all-together">Put It All Together<a href="https://gulpjs.com/blog/gulp-sips-custom-metadata#put-it-all-together" class="hash-link" aria-label="Direct link to Put It All Together" title="Direct link to Put It All Together" translate="no">​</a></h2>
<p>Before you get started, ensure that you are using gulp-cli as described in this previous <a class="" href="https://gulpjs.com/blog/gulp-sips-cli">Sip</a>.</p>
<p>You’ll want your gulpfile to look similar to this:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">var</span><span class="token plain"> gulp </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">require</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">'gulp'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">build</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> … </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">build</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token property-access">description</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'Build entire project.'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">build</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token property-access">flags</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token string-property property">'—-prod'</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'Builds in production mode (minification, etc).'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">//If you are using gulp 3.x:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">gulp</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token method function property-access" style="color:rgb(220, 220, 170)">task</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">'build'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> build</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">//Or if you’ve updated to gulp 4.x</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">gulp</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token method function property-access" style="color:rgb(220, 220, 170)">task</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">build</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></div></code></pre></div></div>
<p>Now run <code>gulp --tasks</code> to see your descriptions and flags. It should look somewhat like the screenshot above the title!</p>]]></content:encoded>
            <category>JavaScript</category>
            <category>Gulp Sips</category>
            <category>Gulp</category>
            <category>Gulpjs</category>
            <category>Command Line</category>
        </item>
        <item>
            <title><![CDATA[Gulp Sips: New Command Line Interface]]></title>
            <link>https://gulpjs.com/blog/gulp-sips-cli</link>
            <guid>https://gulpjs.com/blog/gulp-sips-cli</guid>
            <pubDate>Mon, 10 Jul 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[A Standalone CLI.]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Gulp help message displayed in terminal" src="https://gulpjs.com/assets/images/gulp-sips-cli-help-81db5234a18e87071c730b0faa1acce3.png" width="1353" height="639" class="img_CujE"></p>
<p><em>This is part of our Gulp Sips series: bringing you easily-digestible bits of information on our advanced or unknown features.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-standalone-cli">A Standalone CLI<a href="https://gulpjs.com/blog/gulp-sips-cli#a-standalone-cli" class="hash-link" aria-label="Direct link to A Standalone CLI" title="Direct link to A Standalone CLI" translate="no">​</a></h2>
<p>Traditionally, you’ve run your tasks using the <code>gulp</code> command installed by the main gulp package on npm. However, we’ve moved away from coupling the CLI and library together. The CLI now lives in the <code>gulp-cli</code> <a href="https://www.npmjs.com/package/gulp-cli" target="_blank" rel="noopener noreferrer" class="">package</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="but-why">But why?<a href="https://gulpjs.com/blog/gulp-sips-cli#but-why" class="hash-link" aria-label="Direct link to But why?" title="Direct link to But why?" translate="no">​</a></h2>
<p>This was set into motion because we needed to support versions 3 &amp; 4 (upcoming), even though the two were vastly different. An added benefit is a reduction in the size of global installation.</p>
<p>We were also able to version separately from the main package, allowing for features and bug fixes without impacting your workflow. Many of those features will be topics of upcoming Sips, including adding custom metadata to tasks and utilizing configuration files.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-it-now">Use it now!<a href="https://gulpjs.com/blog/gulp-sips-cli#use-it-now" class="hash-link" aria-label="Direct link to Use it now!" title="Direct link to Use it now!" translate="no">​</a></h2>
<p>If you’ve globally installed gulp before, you’ll want to remove the old version. To check your version, run:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#9CDCFE"><span class="token plain">gulp -v</span><br></div></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="Gulp version message displayed in terminal" src="https://gulpjs.com/assets/images/gulp-sips-cli-versions-2dba1df28302b8b30fe62fec9055e577.png" width="720" height="251" class="img_CujE"></p>
<p>If you don’t see <code>CLI Version 1.x</code> (as shown above), remove your old installation by running:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#9CDCFE"><span class="token plain">npm rm --global gulp</span><br></div></code></pre></div></div>
<p>Now, you can install the standalone CLI using:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#9CDCFE"><span class="token plain">npm install --global gulp-cli</span><br></div></code></pre></div></div>
<p>Run <code>gulp -v</code> again. Everything should match the screenshot above.</p>]]></content:encoded>
            <category>JavaScript</category>
            <category>Gulp Sips</category>
            <category>Gulp Gulpjs</category>
            <category>Command Line</category>
        </item>
    </channel>
</rss>