<?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: Saurabh</title>
    <description>The latest articles on DEV Community by Saurabh (@one_too_cro).</description>
    <link>https://dev.to/one_too_cro</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%2F90694%2F9994c273-e47c-4681-b8ae-e7d249d8868e.gif</url>
      <title>DEV Community: Saurabh</title>
      <link>https://dev.to/one_too_cro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/one_too_cro"/>
    <language>en</language>
    <item>
      <title>Purescript with hot reloading using Parcel</title>
      <dc:creator>Saurabh</dc:creator>
      <pubDate>Sun, 31 Mar 2019 03:37:34 +0000</pubDate>
      <link>https://dev.to/tkshnwesper/purescript-with-hot-reloading-using-parcel-ip3</link>
      <guid>https://dev.to/tkshnwesper/purescript-with-hot-reloading-using-parcel-ip3</guid>
      <description>&lt;h2&gt;
  
  
  The "why"
&lt;/h2&gt;

&lt;p&gt;As such you may have noticed, Parcel does not support Purescript. Meaning that we would not be able to simply say&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"src/Main.purs"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and have it up and running. Another thing being that the recommended build tool for Purescript supports some cool stuff such as&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pulp browserify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(though I really haven't seen this sort of thing with any other build tool) and&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pulp server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which starts a server that rebuilds the JS output for any change in the source.&lt;/p&gt;

&lt;p&gt;However, there is no hot reloading in the browser. You would still have to do a manual refresh. I feel that's kind of a drag when you are developing, and since it is not impossible to setup hot reloading, far from it, it's super easy now thanks to Parcel (since we don't even have to configure Webpack! 🎉) I believe it might not be too farfetched to go for this option.&lt;/p&gt;

&lt;p&gt;Anyway, let's get down to the details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some prerequisites
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Get &lt;code&gt;pulp&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;I'm guessing that you have set up a Purescript project using the recommended approach. If not, &lt;a href="https://github.com/purescript/documentation/blob/master/guides/Getting-Started.md" rel="noopener noreferrer"&gt;knock yourselves out&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a &lt;code&gt;package.json&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Make sure you have a &lt;code&gt;package.json&lt;/code&gt; file in your project root. You may create one manually or answer a few questions on the way to set up one using the&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;command.&lt;/p&gt;

&lt;h3&gt;
  
  
  Need some &lt;code&gt;npm&lt;/code&gt; dependencies as well
&lt;/h3&gt;

&lt;p&gt;Namely,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;concurrently&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;parcel-bundler&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You could simply run,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-D&lt;/span&gt; concurrently parcel-bundler
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  And lastly, an &lt;code&gt;index.html&lt;/code&gt; file
&lt;/h3&gt;

&lt;p&gt;In my case, among the &lt;em&gt;numerous&lt;/em&gt; plugins that I've installed for VSCode (or maybe even VSCode supports this natively) I have a shortcut to a code snippet that essentially generates a boilerplate HTML. You could check if you have it as well by typing a &lt;code&gt;!&lt;/code&gt; in a &lt;code&gt;HTML&lt;/code&gt; 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%2Fuploads%2Farticles%2Frmdavr4hrl69twm4exff.png" 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%2Fuploads%2Farticles%2Frmdavr4hrl69twm4exff.png" alt="html snippet"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In any case, here it is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;http-equiv=&lt;/span&gt;&lt;span class="s"&gt;"X-UA-Compatible"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"ie=edge"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Document&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Great! Y'er doin' it
&lt;/h2&gt;

&lt;p&gt;You only have to make two changes now.&lt;/p&gt;

&lt;h3&gt;
  
  
  Change #1
&lt;/h3&gt;

&lt;p&gt;In the &lt;code&gt;package.json&lt;/code&gt; file set up the script that would make it easier to start the development server.&lt;/p&gt;

&lt;p&gt;Simply add this to the &lt;code&gt;scripts&lt;/code&gt; section:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"concurrently &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;pulp --watch build --to ./output/app.js&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;parcel index.html&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Change #2
&lt;/h3&gt;

&lt;p&gt;Now to close the loop in order for Parcel to pick up the emitted &lt;code&gt;app.js&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Add this to the &lt;code&gt;head&lt;/code&gt; section of the &lt;code&gt;index.html&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"output/app.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it! We're done! 🎊&lt;/p&gt;

&lt;h2&gt;
  
  
  Running it
&lt;/h2&gt;

&lt;p&gt;Just run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and that should be enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up a build script
&lt;/h2&gt;

&lt;p&gt;Alternatively, you may even set up a build script to use when your project is completed.&lt;/p&gt;

&lt;p&gt;Add this to the &lt;code&gt;scripts&lt;/code&gt; section in your &lt;code&gt;package.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pulp build --to ./output/app.js &amp;amp;&amp;amp; parcel build index.html"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cheers! 🍻&lt;/p&gt;

</description>
      <category>purescript</category>
      <category>hotreloading</category>
      <category>parcel</category>
    </item>
  </channel>
</rss>
