<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: kj</title>
    <description>The latest articles on DEV Community by kj (@kristoferjoseph).</description>
    <link>https://dev.to/kristoferjoseph</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F92879%2Ff18e80c4-3f81-43f1-a00c-b565bc4c5516.jpeg</url>
      <title>DEV Community: kj</title>
      <link>https://dev.to/kristoferjoseph</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kristoferjoseph"/>
    <language>en</language>
    <item>
      <title>Progressive Bundling Example</title>
      <dc:creator>kj</dc:creator>
      <pubDate>Tue, 07 Apr 2020 19:29:27 +0000</pubDate>
      <link>https://dev.to/begin/progressive-bundling-example-4855</link>
      <guid>https://dev.to/begin/progressive-bundling-example-4855</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This is a follow-up code example for this post introducing Progressive Bundling: &lt;a href="https://dev.to/begin/progressive-bundling-1gj2"&gt;Progressive Bundling Post&lt;/a&gt;.&lt;/p&gt;
&lt;h5&gt;
  
  
  Check out the live example here: &lt;a href="https://art-jyw.begin.app/"&gt;Live Example&lt;/a&gt;
&lt;/h5&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's step through a project that has progressive bundling enabled to see how you might be able to use this approach in your next project.&lt;/p&gt;

&lt;p&gt;You can follow along at home with this repo: &lt;a href="https://github.com/begin-examples/node-progressive-bundling"&gt;begin-examples/node-progressive-bundling&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alternatively you can deploy your own on &lt;a href="https://begin.com"&gt;Begin&lt;/a&gt; by clicking this link: &lt;a href="https://begin.com/apps/create?template=https://github.com/begin-examples/node-progressive-bundling"&gt;Deploy to Begin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To see the Progressive Bundling pattern in action, open up your browser's development tools to watch the network as the page loads.&lt;/p&gt;

&lt;p&gt;Watch for a request to be made for &lt;code&gt;home.js&lt;/code&gt;, and you should see a 302 redirect to a bundled and fingerprinted version of that module.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J0TJBqjD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xihbpyo7brqbcrscboxc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J0TJBqjD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xihbpyo7brqbcrscboxc.jpg" alt="302 redirect to bundled module"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Project overview
&lt;/h4&gt;

&lt;p&gt;Now that we've seen it in action let's get acquainted with the project. This is a standard Architect serverless project and while you don't need to know Architect to follow along you might want to have &lt;a href="arc.codes" rel="noopener"&gt;arc.codes&lt;/a&gt; open in case any questions come up.&lt;/p&gt;

&lt;p&gt;Let's start at the beginning and look at how to configure the project's infrastructure.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.arc&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;The project's &lt;code&gt;.arc&lt;/code&gt; file is how we declare this app's infrastructure as code. We declare all of the app's HTTP Functions under the &lt;code&gt;@http&lt;/code&gt; pragma.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;@app
pb-example

@static
folder public

@http
get /
get /about
get /modules/:type/:module
get /cache
post /cache

@tables
data
  scopeID &lt;span class="k"&gt;*&lt;/span&gt;String
  dataID &lt;span class="k"&gt;**&lt;/span&gt;String
  ttl TTL

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h6&gt;
  
  
  folder structure
&lt;/h6&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;├── src/
│   └── http/
│   │    └── get-index/
│   └── views/
│        └── modules/
│   └── shared/
└── .arc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h5&gt;
  
  
  &lt;code&gt;src/http&lt;/code&gt;
&lt;/h5&gt;

&lt;p&gt;This folder is where all the HTTP function's source code lives. Architect maps these HTTP Functions to the routes declared under the &lt;code&gt;@http&lt;/code&gt; pragma in the app's &lt;code&gt;.arc&lt;/code&gt; file.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;By convention, &lt;code&gt;get-index/&lt;/code&gt; is mapped to the route '/' and serves &lt;code&gt;https://yoursite/&lt;/code&gt;. Similarly, &lt;code&gt;get-about&lt;/code&gt; is assigned to &lt;code&gt;/about&lt;/code&gt; and serves &lt;code&gt;https://yoursite/about&lt;/code&gt;. A &lt;code&gt;post-cache&lt;/code&gt; route would accept posts from forms having the action attribute set to &lt;code&gt;action="/cache"&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  &lt;code&gt;src/shared&lt;/code&gt;
&lt;/h5&gt;

&lt;p&gt;This folder is where you put code you want to share between functions. Any code placed inside &lt;code&gt;src/shared&lt;/code&gt; will be available to require from &lt;code&gt;@architect/shared&lt;/code&gt;.&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;code&gt;src/views&lt;/code&gt;
&lt;/h5&gt;

&lt;p&gt;This folder is where all of your shared view code lives. These files are copied to all the &lt;code&gt;GET&lt;/code&gt; routes by default allowing you to share view code throughout your app. Any code placed inside &lt;code&gt;src/views&lt;/code&gt; will be available to require from &lt;code&gt;@architect/views&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Implementation
&lt;/h4&gt;

&lt;p&gt;This example app implements the Progressive Bundling pattern with a few discrete steps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;cache lookup:&lt;/strong&gt;
First, we check to see if the file already exists in the cache. If it does, we return it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;bundle:&lt;/strong&gt;
Then if the requested file isn't already in the cache, we bundle it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fingerprint:&lt;/strong&gt;
Next, we generate a fingerprint id and append it to the file name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cache&lt;/strong&gt;
Then this new file is cached for subsequent requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;redirect:&lt;/strong&gt;
Finally, we redirect to the newly cached file.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;It is possible to create a fingerprint by using a hash of the bundled file's contents. Appending a fingerprint to the file name ensures that the file name is updated when the content of the bundle changes. Adding a fingerprint to the file name avoids getting an outdated file due to a cached version in the end user's browser or network.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now that we know the steps let's follow a request for a module through to the bundled response.&lt;/p&gt;

&lt;p&gt;The route we are going to focus on first is &lt;code&gt;get /modules/:type/:module&lt;/code&gt;.  This route passes a module type and module name to our HTTP Function as parameters on the request.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The folder for this route is generated by Architect the first time you start the sandbox server. The folder for this route replaces the colons ":" that defines a route to a system-friendly three zeros "000". This means that the route &lt;code&gt;get /modules/:type/:module&lt;/code&gt; will generate the folder &lt;code&gt;src/http/get-modules-000type-000module&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://github.com/begin-examples/node-progressive-bundling/blob/master/src/http/get-modules-000type-000module/index.js"&gt;&lt;code&gt;src/http/get-modules-000type-000module&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Check to see if file is in cache&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;read&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="c1"&gt;// Bundle the file if it is not found in the cache&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bundle&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Redirect to the file&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`/_static/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The above code is where all the action is in this file. This code first looks to see if there is a cached version to send; if not, it bundles the requested file then redirects the request to the bundled version.&lt;/p&gt;

&lt;p&gt;Let's look at how we have implemented the cache.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/begin-examples/node-progressive-bundling/blob/master/src/shared/cache-read.js"&gt;&lt;code&gt;src/shared/cache-read.js&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@begin/data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// check the cache manifest&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;table&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;module-cache&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;In the previous code block, we look for the module by name in a table called &lt;code&gt;module-cache&lt;/code&gt; then return the file if found. In this example, we use &lt;a href="https://github.com/smallwins/begin-data"&gt;Begin data&lt;/a&gt; for simplicity, but any data store would work.&lt;/p&gt;

&lt;p&gt;Next is the code responsible for bundling the file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/begin-examples/node-progressive-bundling/tree/master/src/http/get-modules-000type-000module/bundle.js"&gt;&lt;code&gt;src/http/get-modules-000type-000module/bundle.js&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Get the path to this module on disk&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="c1"&gt;// Pass the file path to rollup&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;bundle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rollup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rollup&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="c1"&gt;// Bundle together modules&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;bundled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bundle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;esm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Above we look up the file and then pass it to rollup to bundle. Rollup was used in this example, but you could substitute the bundler of your choice.&lt;/p&gt;

&lt;p&gt;One last stop at the redirect code before sending the response.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/begin-examples/node-progressive-bundling/blob/master/src/http/get-modules-000type-000module/302.js"&gt;&lt;code&gt;src/http/get-modules-000type-000module/302.js&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;302&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Pretty straight forward, but it's useful to see how to send any type of reponse with a status code.&lt;/p&gt;

&lt;h4&gt;
  
  
  Wrapping up
&lt;/h4&gt;

&lt;p&gt;We stepped through a project implementing this pattern and looked at all the places this pattern can be customized to fit your own needs. This example illustrates how Progressive Bundling can be implemented but is by no means the end. You can apply this pattern in your way and with other outputs. We can't wait to see what you make!&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>progressive</category>
      <category>bundling</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Progressive Bundling</title>
      <dc:creator>kj</dc:creator>
      <pubDate>Tue, 07 Apr 2020 19:29:18 +0000</pubDate>
      <link>https://dev.to/begin/progressive-bundling-1gj2</link>
      <guid>https://dev.to/begin/progressive-bundling-1gj2</guid>
      <description>&lt;h4&gt;
  
  
  A dynamic module bundling pattern for modern web development
&lt;/h4&gt;

&lt;p&gt;Until recently, the use of JavaScript modules required a build step to make them run in the browser. Since the general availability of ES6 modules in browsers, it is possible to use JavaScript’s built-in module system. What this means is we no longer require a build step to be able to write modular code that runs in the browser natively.  Modules also can benefit from the addition of parallel loading made available with HTTP/2.&lt;/p&gt;

&lt;p&gt;As we all know, with every development choice, there are new considerations that ultimately emerge over time.  &lt;/p&gt;

&lt;p&gt;For instance, with a build-step based workflow, your build time can start to take longer, and your compiler configuration can become exceedingly more complex as your project’s source code grows.&lt;/p&gt;

&lt;p&gt;Modules don’t require the overhead of a build step, which is great, but loading too many sub-modules at once can create a bottleneck that can increase the time it takes to load your web page completely.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1nfnc42xx4tj4mun7yfq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1nfnc42xx4tj4mun7yfq.jpg" alt="sub-modules loading in parallel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is possible to get a long way without running into this issue, but if it does arise, cutting down on requests can help.  &lt;/p&gt;

&lt;h4&gt;
  
  
  Enter Progressive Bundling
&lt;/h4&gt;

&lt;p&gt;This pattern uses a cloud function to optimize the amount of JavaScript sent to the browser by bundling together modules and their sub-modules, into a single request, on-demand. Bundling these files together cuts down on the number of files being loaded in parallel by the browser. This bundled file is then “fingerprinted,” or named with an appended id representing the file’s contents. We then cache this generated file with this fingerprinted name for subsequent requests. The request is then redirected with a 302 status code to the newly bundled, fingerprinted, and cached file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqntq4l649w64p58u116u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqntq4l649w64p58u116u.jpg" alt="progressive bundling"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What makes this progressive is that you can start with stock JavaScript for development, which is easier to debug, then layer on bundling with a cloud function, and a standard HTTP redirect for an optimized build if you ever need it.&lt;/p&gt;

&lt;h4&gt;
  
  
  A delicate balance
&lt;/h4&gt;

&lt;p&gt;It is always important to audit your site performance to understand when to employ optimization. It is possible to cut down on requests, but end-up loading too large a file that ultimately negatively impacts performance. The best bet is to always load as little JavaScript as possible.&lt;/p&gt;

&lt;h4&gt;
  
  
  Take it farther
&lt;/h4&gt;

&lt;p&gt;Think about how you could apply this approach to delivering other payloads such as CSS or icons. You could even add a transpiler if you wanted.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://dev.to/begin/progressive-bundling-example-4855"&gt;Check out the Progressive Bundling Example&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Where we step through the code of an example app using this pattern. Deploy your own Progressive Bundling example app on &lt;a href="https://begin.com" rel="noopener noreferrer"&gt;Begin&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;a href="https://begin.com/apps/create?template=https://github.com/begin-examples/node-progressive-bundling" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.begin.com%2Fdeploy-to-begin.svg" alt="Deploy to Begin" id="deploy-to-begin"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>modules</category>
      <category>bundling</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
