<?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: Teerasej Jiraphatchandej</title>
    <description>The latest articles on DEV Community by Teerasej Jiraphatchandej (@teerasej).</description>
    <link>https://dev.to/teerasej</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%2F524608%2Fb8b57287-15ab-44a5-99f8-d4b2e33754d0.jpeg</url>
      <title>DEV Community: Teerasej Jiraphatchandej</title>
      <link>https://dev.to/teerasej</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/teerasej"/>
    <language>en</language>
    <item>
      <title>Flutter's workaround for blank web page with web release</title>
      <dc:creator>Teerasej Jiraphatchandej</dc:creator>
      <pubDate>Tue, 03 May 2022 13:57:57 +0000</pubDate>
      <link>https://dev.to/teerasej/flutters-workaround-for-blank-web-page-with-web-release-1plm</link>
      <guid>https://dev.to/teerasej/flutters-workaround-for-blank-web-page-with-web-release-1plm</guid>
      <description>&lt;p&gt;If you finished your Flutter web project and uploaded your excellent HTML and related file to your hosting. &lt;/p&gt;

&lt;p&gt;Then boom! Nothing appears, just a white shiny web page. you may need the following workaround  &lt;/p&gt;

&lt;h2&gt;
  
  
  A. Release with HTML web renderer
&lt;/h2&gt;

&lt;p&gt;Flutter team mentioned it in &lt;a href="https://docs.flutter.dev/deployment/web"&gt;document&lt;/a&gt; that with default selection. Flutter will choose a web renderer according to the environment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML for Mobile browser&lt;/li&gt;
&lt;li&gt;Canvaskit for Desktop browser&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In some condition, Canvaskit will not render your production-ready web application. But HTML one will do. &lt;/p&gt;

&lt;p&gt;Try the following build command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter build web &lt;span class="nt"&gt;--web-renderer&lt;/span&gt; html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will force your release to use HTML renderer instead of Canvaskit.&lt;/p&gt;

&lt;h2&gt;
  
  
  B. Remove that &lt;strong&gt;base&lt;/strong&gt; element
&lt;/h2&gt;

&lt;p&gt;I found out in &lt;a href="https://github.com/flutter/flutter/issues/61464#issuecomment-802580204"&gt;this repository's issue&lt;/a&gt; where people mention that by removing (or yes, comment it out) &lt;code&gt;&amp;lt;base&amp;gt;&lt;/code&gt; element in &lt;strong&gt;index.html&lt;/strong&gt; will do the trick.&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;base&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Any better way?
&lt;/h2&gt;

&lt;p&gt;I know that these workarounds might not be the best. But if you found a better solution to solve this problem. Please feel free to comment below. &lt;/p&gt;

</description>
      <category>flutter</category>
    </item>
    <item>
      <title>Step-by-step to publish your flutter project as Android App Bundle</title>
      <dc:creator>Teerasej Jiraphatchandej</dc:creator>
      <pubDate>Thu, 28 Apr 2022 16:28:46 +0000</pubDate>
      <link>https://dev.to/teerasej/step-by-step-to-publish-your-flutter-project-as-andriod-app-bundle-1bpe</link>
      <guid>https://dev.to/teerasej/step-by-step-to-publish-your-flutter-project-as-andriod-app-bundle-1bpe</guid>
      <description>&lt;p&gt;The Flutter's &lt;a href="https://docs.flutter.dev/deployment/android#signing-the-app"&gt;official instruction&lt;/a&gt; is suitable for a start. But I want to note my step-by-step here. So you might not need to guess about the file's path.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Create your Keystore
&lt;/h2&gt;

&lt;p&gt;Keystore is the file you should have to sign your AAB file. &lt;/p&gt;

&lt;p&gt;Run the following command in Terminal at your project's root directory.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;keytool -genkey -v -keystore upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After entering this command, you will be asked to fill key's password and some information.&lt;/p&gt;

&lt;p&gt;Please pay attention to the following options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;-keystore&lt;/strong&gt; is the file's name and where it will be created. &lt;strong&gt;upload-keystore.jks&lt;/strong&gt; will be made at your project's root directory. The original instruction: &lt;strong&gt;~/upload-keystore.jks&lt;/strong&gt; will put your Keystore file in the user's root directory. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-alias&lt;/strong&gt; will be your key's alias name. You will need to use it later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Create a reference file to Keystore
&lt;/h2&gt;

&lt;p&gt;Create a file named &lt;strong&gt;key.properties&lt;/strong&gt; at &lt;strong&gt;[project root]/android/&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;storePassword=&amp;lt;password from previous step&amp;gt;
keyPassword=&amp;lt;password from previous step&amp;gt;
keyAlias=upload
storeFile=../../upload-keystore.jks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;if you create with different key alias, please specify it in &lt;strong&gt;keyAlias&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;storeFile&lt;/strong&gt; if you choose to put Keystore file at the root of your Flutter's project directory. This file's path would work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Modify app/build.gradle
&lt;/h2&gt;

&lt;p&gt;Now, we have to modify build.gradle. So Flutter can use it to sign and generate an AAB file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Load keystore's properties
&lt;/h3&gt;

&lt;p&gt;Open &lt;strong&gt;[project]/android/app/build.gradle&lt;/strong&gt;, look for &lt;strong&gt;android&lt;/strong&gt; block, and put following code at the top of its.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   def keystoreProperties = new Properties()
   def keystorePropertiesFile = rootProject.file('key.properties')
   if (keystorePropertiesFile.exists()) {
       keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
   }

   android {
         ...
   }

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Replace buildTypes block
&lt;/h3&gt;

&lt;p&gt;find &lt;strong&gt;buildTypes&lt;/strong&gt; block. it should look like the below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   buildTypes {
       release {
           // TODO: Add your own signing config for the release build.
           // Signing with the debug keys for now,
           // so `flutter run --release` works.
           signingConfig signingConfigs.debug
       }
   }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you have to &lt;strong&gt;replace&lt;/strong&gt; it with following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   signingConfigs {
       release {
           keyAlias keystoreProperties['keyAlias']
           keyPassword keystoreProperties['keyPassword']
           storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
           storePassword keystoreProperties['storePassword']
       }
   }
   buildTypes {
       release {
           signingConfig signingConfigs.release
       }
   }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Let's sign and build the release version
&lt;/h2&gt;

&lt;p&gt;After you modified &lt;strong&gt;build.gradle&lt;/strong&gt; file, you should run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter clean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So you can try to build the AAB file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter build appbundle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the build has been successful, you will see the AAB's file path on the Terminal's console.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>flutter</category>
      <category>android</category>
    </item>
    <item>
      <title>Easy way to delete your image from docker hub</title>
      <dc:creator>Teerasej Jiraphatchandej</dc:creator>
      <pubDate>Thu, 28 Apr 2022 01:34:05 +0000</pubDate>
      <link>https://dev.to/teerasej/easy-way-to-delete-your-image-from-docker-hub-119p</link>
      <guid>https://dev.to/teerasej/easy-way-to-delete-your-image-from-docker-hub-119p</guid>
      <description>&lt;p&gt;Free and easy, you can push your local docker image to the docker hub.&lt;/p&gt;

&lt;p&gt;But sometimes, we make mistakes by pushing an unnecessary image to the public or realizing that the image should not be there anymore.&lt;/p&gt;

&lt;p&gt;Let's remove it from the docker hub!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Go to your repository on docker hub
&lt;/h2&gt;

&lt;p&gt;Sign in, then browse to your repository.&lt;/p&gt;

&lt;p&gt;This is where you will see the &lt;strong&gt;Manage repository&lt;/strong&gt; button. Click it.&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%2Fhgins4ecywyz1pxjk0u3.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%2Fhgins4ecywyz1pxjk0u3.png" alt="Your docker image repository web page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Go to Setting
&lt;/h2&gt;

&lt;p&gt;You are in the dashboard, but we should look for the Setting tab and click it.&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%2Fhdg7odritsmpi051wmce.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%2Fhdg7odritsmpi051wmce.png" alt="Your docker image's repository dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Click that delete button
&lt;/h2&gt;

&lt;p&gt;So far, so good. You will see the Delete Repository section at the bottom of this section. There is a nice delete button here. Click it and say goodbye to your image.&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%2Fqiz1ou90fsx34mkv389b.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%2Fqiz1ou90fsx34mkv389b.png" alt="Setting section in docker image's repository"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
    </item>
    <item>
      <title>Step-by-step to turn your fresh node project to use typescript</title>
      <dc:creator>Teerasej Jiraphatchandej</dc:creator>
      <pubDate>Tue, 26 Apr 2022 14:09:53 +0000</pubDate>
      <link>https://dev.to/teerasej/step-by-step-to-turn-your-fresh-node-project-to-use-typescript-17fp</link>
      <guid>https://dev.to/teerasej/step-by-step-to-turn-your-fresh-node-project-to-use-typescript-17fp</guid>
      <description>&lt;p&gt;OK, you fall in love with typescript, and now you really want to use it in your new express project.&lt;/p&gt;

&lt;h2&gt;
  
  
  A common approach in using typescript in node project
&lt;/h2&gt;

&lt;p&gt;Start the new node project by running this command in your directory via the terminal.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Create a new node project, with a package.json file
&lt;/h3&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;This will generate a new &lt;strong&gt;package.json&lt;/strong&gt; file. Let me show mine:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"friend-api"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Error: no test specified&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;&amp;amp; exit 1"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Teerasej Jiraphatchandej"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ISC"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Add packages for typescript
&lt;/h3&gt;

&lt;p&gt;So we want to set up this project for us to use typescript in development. We add 2 packages as &lt;code&gt;devDependencies&lt;/code&gt;:&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; @types/node
npm i &lt;span class="nt"&gt;-D&lt;/span&gt; typescript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we go. We have &lt;strong&gt;package.json&lt;/strong&gt; file similar to the one below:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"friend-api"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Error: no test specified&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;&amp;amp; exit 1"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Teerasej Jiraphatchandej"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ISC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@types/node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^17.0.29"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typescript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.6.3"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Add tsconfig.json
&lt;/h3&gt;

&lt;p&gt;OK, let's create another file: &lt;strong&gt;tsconfig.json&lt;/strong&gt; at the root of the project's directory. This file will tell how would typescript's compiler work:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"compilerOptions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"module"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"commonjs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"esModuleInterop"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"es6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"moduleResolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sourceMap"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"outDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dist"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lib"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"es2015"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Let compile and run
&lt;/h3&gt;

&lt;p&gt;from this point, you can use the following command in the terminal to compile all &lt;code&gt;tsc&lt;/code&gt; files in project into &lt;code&gt;/dist&lt;/code&gt; directory (as you set it up in &lt;strong&gt;tsconfig.json&lt;/strong&gt;: &lt;strong&gt;outDir&lt;/strong&gt;)&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;and you can run your compiled code with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node dist/&amp;lt;file name&amp;gt;.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Done, but you can add more ease
&lt;/h3&gt;

&lt;p&gt;Execute 2 commands repeatedly will take out our energy. You can use the script section in package.json to create a shortcut&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&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;"tsc &amp;amp;&amp;amp; node dist/app.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Error: no test specified&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;&amp;amp; exit 1"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After save the package.json file, you can compile and run your project with one simple command:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



</description>
      <category>tutorial</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
