<?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>Forem: Kamiswara Angga W.</title>
    <description>The latest articles on Forem by Kamiswara Angga W. (@anggakswr).</description>
    <link>https://forem.com/anggakswr</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%2F695357%2F65274a84-7e55-4a46-8250-e66370f1be65.jpg</url>
      <title>Forem: Kamiswara Angga W.</title>
      <link>https://forem.com/anggakswr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/anggakswr"/>
    <language>en</language>
    <item>
      <title>Give your Linux system a boost with swap space!</title>
      <dc:creator>Kamiswara Angga W.</dc:creator>
      <pubDate>Tue, 18 Mar 2025 09:05:36 +0000</pubDate>
      <link>https://forem.com/anggakswr/give-your-linux-system-a-boost-with-swap-space-2pa</link>
      <guid>https://forem.com/anggakswr/give-your-linux-system-a-boost-with-swap-space-2pa</guid>
      <description>&lt;p&gt;Swap memory is an essential feature in Linux systems that serves as a safety net when your physical RAM runs low. For frontend developers working with memory-intensive frameworks like Next.js and Nuxt.js, having swap space can help prevent system crashes and maintain stability under heavy loads. In this article, we'll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What swap memory is and why it's important&lt;/li&gt;
&lt;li&gt;Step-by-step instructions to create swap on any Debian-based Linux system&lt;/li&gt;
&lt;li&gt;How to determine the right swap size for your needs, especially on a system with 16GB of RAM&lt;/li&gt;
&lt;li&gt;Tips on using swap effectively alongside demanding development tasks&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What Is Swap Memory?
&lt;/h2&gt;

&lt;p&gt;Swap is a dedicated space on your storage device (HDD or SSD) used by the operating system when the physical RAM is nearly exhausted. Although accessing swap is slower than accessing RAM, it provides an additional layer of memory management that can help prevent crashes during sudden memory spikes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Is Swap Memory Important?
&lt;/h2&gt;

&lt;p&gt;For developers who run resource-heavy applications or frameworks, swap memory offers several benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crash Prevention: Swap acts as a backup when your system's RAM reaches its limits, reducing the risk of application or system crashes.&lt;/li&gt;
&lt;li&gt;Extra Memory Buffer: Even with 16GB of RAM, certain development tasks may temporarily require more memory than available. Swap fills this gap.&lt;/li&gt;
&lt;li&gt;Hibernation Support: If you use hibernation, the swap space should ideally be at least as large as your RAM to store the entire system state.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step-by-Step Guide to Creating Swap Memory
&lt;/h2&gt;

&lt;p&gt;Follow these steps on any Debian-based Linux distribution to set up swap:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Create a Swap File
&lt;/h3&gt;

&lt;p&gt;You can create a swap file using either &lt;code&gt;fallocate&lt;/code&gt; (faster) or &lt;code&gt;dd&lt;/code&gt; if &lt;code&gt;fallocate&lt;/code&gt; is not available.&lt;/p&gt;

&lt;p&gt;Using &lt;code&gt;fallocate&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo fallocate -l 2G /swapfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using &lt;code&gt;dd&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: Adjust the size (e.g., 2G or 2048 blocks) based on your desired swap space.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Set the Correct Permissions
&lt;/h3&gt;

&lt;p&gt;Restrict access to the swap file so that only root can read and write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo chmod 600 /swapfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3. Mark the File as Swap
&lt;/h3&gt;

&lt;p&gt;Initialize the file for swap usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mkswap /swapfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  4. Enable the Swap File
&lt;/h3&gt;

&lt;p&gt;Activate the swap file immediately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo swapon /swapfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  5. Verify the Swap Space
&lt;/h3&gt;

&lt;p&gt;Check if the swap is active using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo swapon --show
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;free -h
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  6. Configure Swap to Activate at Boot
&lt;/h3&gt;

&lt;p&gt;To ensure your swap space is available after a reboot, add the following entry to your &lt;code&gt;/etc/fstab&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Determining the Right Swap Size for a 16GB System
&lt;/h2&gt;

&lt;p&gt;Choosing the correct swap size depends on your specific needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you don't plan to use hibernation, 2GB to 4GB of swap space is typically sufficient even on systems with 16GB of RAM. The swap acts as an emergency buffer for unexpected memory spikes.&lt;/li&gt;
&lt;li&gt;For hibernation, it is recommended to have swap space equal to your RAM size (i.e., 16GB) so the system can store the entire contents of the RAM.&lt;/li&gt;
&lt;li&gt;When running heavy frameworks like Next.js or Nuxt.js that consume significant memory, having adequate swap space can safeguard against crashes during peak usage periods. However, keep in mind that swap is slower than RAM, so it's best used as a fallback rather than a primary memory resource.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Swap memory plays a vital role in maintaining system stability, especially on Debian-based Linux distributions used for development. By following this guide, you can create and configure swap space tailored to your system's needs—whether for occasional memory spikes or to support hibernation. For frontend developers working with heavy frameworks, swap ensures that unexpected memory demands do not bring your system to a halt.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>javascript</category>
      <category>performance</category>
      <category>linux</category>
    </item>
    <item>
      <title>Optimizing Next.js 15 App Router with template.tsx and CustomProviders</title>
      <dc:creator>Kamiswara Angga W.</dc:creator>
      <pubDate>Fri, 07 Feb 2025 09:28:17 +0000</pubDate>
      <link>https://forem.com/anggakswr/optimizing-nextjs-15-app-router-with-templatetsx-and-customproviders-2e09</link>
      <guid>https://forem.com/anggakswr/optimizing-nextjs-15-app-router-with-templatetsx-and-customproviders-2e09</guid>
      <description>&lt;p&gt;In modern web development, &lt;strong&gt;Server-Side Rendering (SSR)&lt;/strong&gt; and &lt;strong&gt;Search Engine Optimization (SEO)&lt;/strong&gt; are essential for creating fast, discoverable applications. Next.js has long been celebrated for its ability to handle both efficiently. With Next.js 15 and its new App Router, the framework now enables you to clearly separate &lt;strong&gt;server components&lt;/strong&gt; from &lt;strong&gt;client components&lt;/strong&gt;. One elegant solution to manage this separation while still supporting robust client-side interactivity is to use a dedicated &lt;code&gt;template.tsx&lt;/code&gt; file that wraps a centralized &lt;code&gt;CustomProviders&lt;/code&gt; component in a Suspense fallback. This approach makes it easy to integrate multiple providers—such as Redux, react-query, and various UI libraries—without compromising SSR or SEO.&lt;/p&gt;

&lt;h1&gt;
  
  
  In this article, we will cover:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An overview of the Next.js 15 App Router&lt;/strong&gt; and the distinction between server and client components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to create a centralized CustomProviders component&lt;/strong&gt; to encapsulate all client-side providers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrapping CustomProviders in a Suspense component&lt;/strong&gt; within &lt;code&gt;template.tsx&lt;/code&gt; to manage loading states gracefully.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best practices for integrating client-side providers&lt;/strong&gt; without affecting SSR and SEO.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Next.js 15 App Router: Merging Server and Client Components
&lt;/h1&gt;

&lt;p&gt;Next.js 15 introduces a new modular approach using the &lt;code&gt;app/&lt;/code&gt; directory, where components are by default treated as server components. This ensures that your pages are rendered on the server, providing fast load times and optimal SEO. However, not every part of your application can rely solely on SSR. Interactive features such as state management, data fetching (using libraries like &lt;code&gt;react-query&lt;/code&gt;), and dynamic UI elements require client-side logic.&lt;/p&gt;

&lt;p&gt;To enable client-side features, you mark specific components with the &lt;code&gt;"use client"&lt;/code&gt; directive. This tells Next.js to treat those components as client components, enabling the use of browser-specific APIs and interactive functionality.&lt;/p&gt;




&lt;h1&gt;
  
  
  Centralizing Client-Side Logic with CustomProviders
&lt;/h1&gt;

&lt;p&gt;Rather than scattering individual providers throughout your application, a more maintainable approach is to create a single component called &lt;code&gt;CustomProviders&lt;/code&gt;. This component can encapsulate multiple providers (e.g., Redux for state management, &lt;code&gt;react-query&lt;/code&gt; for data fetching, and any UI-specific context providers). This centralized approach makes your codebase cleaner and easier to maintain.&lt;/p&gt;

&lt;p&gt;Here’s how you might define the &lt;code&gt;CustomProviders&lt;/code&gt; component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// components/CustomProviders.tsx&lt;/span&gt;
&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Provider&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;ReduxProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-redux&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../store&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;QueryClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;QueryClientProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-query&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Import any additional providers, e.g., a theme provider from your UI library&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ThemeProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-ui-library&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;queryClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;QueryClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;CustomProvidersProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;CustomProviders&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;CustomProvidersProps&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ReduxProvider&lt;/span&gt; &lt;span class="na"&gt;store&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;QueryClientProvider&lt;/span&gt; &lt;span class="na"&gt;client&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;queryClient&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ThemeProvider&lt;/span&gt; &lt;span class="na"&gt;attribute&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"class"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ThemeProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;QueryClientProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ReduxProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;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;In this example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ReduxProvider&lt;/strong&gt;: Integrates Redux for global state management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QueryClientProvider&lt;/strong&gt;: Provides react-query’s QueryClient instance for managing asynchronous data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ThemeProvider&lt;/strong&gt;: Demonstrates how to include a UI-related provider (replace with your actual UI library provider as needed).&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Wrapping CustomProviders with Suspense in template.tsx
&lt;/h1&gt;

&lt;p&gt;To gracefully handle loading states (for example, if any of the providers have asynchronous initialization logic), it is a good idea to wrap &lt;code&gt;CustomProviders&lt;/code&gt; within a &lt;code&gt;Suspense&lt;/code&gt; component. This can be done inside your &lt;code&gt;template.tsx&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/template.tsx&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Suspense&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;CustomProviders&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../components/CustomProviders&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Template&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Suspense&lt;/span&gt; &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Loading...&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;CustomProviders&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;CustomProviders&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Suspense&lt;/span&gt;&lt;span class="p"&gt;&amp;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;In this setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"use client" directive&lt;/strong&gt;: Ensures that &lt;code&gt;template.tsx&lt;/code&gt; and its children are treated as client components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;&amp;lt;Suspense&amp;gt;&lt;/code&gt; component&lt;/strong&gt;: Wraps &lt;code&gt;CustomProviders&lt;/code&gt;, providing a fallback UI (here, a simple "Loading..." div) during lazy loading or asynchronous initialization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Centralized client-side interactivity&lt;/strong&gt;: This structure centralizes all client-side interactivity within &lt;code&gt;CustomProviders&lt;/code&gt;, ensuring that pages that don’t need these features can still be server-rendered efficiently.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Best Practices When Using CustomProviders and template.tsx
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Isolate Client Providers&lt;/strong&gt;: Keep only the providers and UI components that require client-side behavior within &lt;code&gt;CustomProviders&lt;/code&gt;. This ensures that the server-rendered parts of your application remain unaffected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modularize Providers&lt;/strong&gt;: As your application grows, consider breaking down providers into smaller sub-components or modules within &lt;code&gt;CustomProviders&lt;/code&gt; for easier maintenance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor Performance&lt;/strong&gt;: As you integrate more client-side logic, keep an eye on bundle size and overall performance to maintain a smooth user experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handle Suspense Gracefully&lt;/strong&gt;: Choose appropriate fallback content for &lt;code&gt;Suspense&lt;/code&gt; to provide clear feedback to users during asynchronous operations.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Using a centralized &lt;code&gt;CustomProviders&lt;/code&gt; component inside &lt;code&gt;template.tsx&lt;/code&gt; is an elegant and maintainable way to integrate multiple client-only providers—such as Redux, &lt;code&gt;react-query&lt;/code&gt;, and UI libraries—into your Next.js 15 application. By wrapping &lt;code&gt;CustomProviders&lt;/code&gt; in a &lt;code&gt;Suspense&lt;/code&gt; component, you can manage loading states effectively while ensuring that SSR and SEO remain intact. This approach provides a clear separation of concerns, ensuring that interactive client-side features do not compromise the performance and search engine visibility of your application.&lt;/p&gt;

&lt;p&gt;Happy coding, and may your Next.js projects be both interactive and SEO-friendly!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Don't Build React &amp; Next.js Apps with ChatGPT Without Becoming a Developer First</title>
      <dc:creator>Kamiswara Angga W.</dc:creator>
      <pubDate>Mon, 03 Feb 2025 10:50:32 +0000</pubDate>
      <link>https://forem.com/anggakswr/dont-build-react-nextjs-apps-with-chatgpt-without-becoming-a-developer-first-28cl</link>
      <guid>https://forem.com/anggakswr/dont-build-react-nextjs-apps-with-chatgpt-without-becoming-a-developer-first-28cl</guid>
      <description>&lt;p&gt;The debate over whether AI can replace programmers has been ongoing for a while. However, after learning and observing AI's development recently, I am more convinced that AI will not fully replace programmers—at least not in the near future.&lt;/p&gt;

&lt;p&gt;There are already several platforms that allow website or even startup application development using AI. However, in reality, the quality and design of these AI-generated projects are still far from ideal. The designs often lack user experience optimization and fail to meet industry standards.&lt;/p&gt;

&lt;p&gt;A while ago, there was news claiming that a company had developed AI capable of coding, debugging, and even searching autonomously. Upon further investigation, this information turned out to be either exaggerated or outright false. The belief that AI can completely replace programmers is premature and needs to be clarified.&lt;/p&gt;

&lt;p&gt;I've encountered people who have no understanding of React or Next.js yet attempt to build a startup application using AI alone. Without proper UI/UX design in Figma, they rely solely on ChatGPT to generate code. The result? The code is often bloated, non-reusable, and filled with redundancies. I’ve worked with a team where someone took this approach, and the outcome was far from satisfactory.&lt;/p&gt;

&lt;p&gt;Do not build applications solely with AI if you don’t understand coding yourself. How can you conclude that coding in React and Next.js can be entirely replaced by AI if you don’t understand React and Next.js at all? Moreover, if we ask AI, whether it's ChatGPT or DeepSeek, they are not even aware that Next.js is now at version 15. They still think it’s at version 13. This proves that as developers, we still need to read documentation and keep learning.&lt;/p&gt;

&lt;p&gt;For example, React has essential concepts like useState and useEffect, while Next.js involves SSR (Server-Side Rendering) and CSR (Client-Side Rendering). It took me more than 2 months to learn these frameworks properly. In my opinion, if you want to utilize AI for coding, you should first become a developer and dedicate at least 2 months to learning these technologies.&lt;/p&gt;

&lt;p&gt;As developers, we understand these shortcomings, but to the general public, AI might seem like a magical solution for building applications. The reality is, if someone lacks fundamental coding knowledge and depends entirely on AI, the final product can be a disaster. On the other hand, if someone already understands coding and leverages AI as a tool, the results can be extraordinary.&lt;/p&gt;

&lt;p&gt;In conclusion, using AI for coding is not inherently wrong—as long as you have a solid understanding of programming fundamentals. AI should be seen as a tool to enhance and accelerate development, not as a complete replacement for developers.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Automatically Monitor and Manage RAM Usage for Next.js Development</title>
      <dc:creator>Kamiswara Angga W.</dc:creator>
      <pubDate>Wed, 08 Jan 2025 09:03:29 +0000</pubDate>
      <link>https://forem.com/anggakswr/automatically-monitor-and-manage-ram-usage-for-nextjs-development-24i</link>
      <guid>https://forem.com/anggakswr/automatically-monitor-and-manage-ram-usage-for-nextjs-development-24i</guid>
      <description>&lt;p&gt;When working with heavy frameworks like Next.js 14 and above, you might notice significant memory usage, especially during development. If your system has limited resources, running &lt;code&gt;yarn dev&lt;/code&gt; or &lt;code&gt;pnpm dev&lt;/code&gt; can sometimes cause your machine to hang or become unresponsive. In this article, we will create a simple Bash script to monitor RAM usage and automatically stop the development server if the usage exceeds a defined limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Monitor Memory Usage?
&lt;/h2&gt;

&lt;p&gt;High RAM usage can slow down your system, leading to decreased productivity and potential data loss if the machine crashes. By automating the process of stopping heavy processes when memory usage crosses a certain threshold, you can prevent such issues and ensure smoother development.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Script
&lt;/h2&gt;

&lt;p&gt;Here is the Bash script that monitors RAM usage and terminates processes when necessary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="c"&gt;# RAM usage limit (percentage)&lt;/span&gt;
&lt;span class="nv"&gt;LIMIT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;95  &lt;span class="c"&gt;# Change to 90 if you want a lower limit&lt;/span&gt;

&lt;span class="c"&gt;# Function to get current RAM usage&lt;/span&gt;
get_ram_usage&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    free | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'/Mem:/ {printf "%.0f", $3/$2 * 100}'&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# Loop to monitor RAM periodically&lt;/span&gt;
&lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;&lt;span class="nv"&gt;RAM_USAGE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;get_ram_usage&lt;span class="si"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"RAM usage: &lt;/span&gt;&lt;span class="nv"&gt;$RAM_USAGE&lt;/span&gt;&lt;span class="s2"&gt;%"&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt; RAM_USAGE &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; LIMIT &lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"RAM has reached the limit of &lt;/span&gt;&lt;span class="nv"&gt;$LIMIT&lt;/span&gt;&lt;span class="s2"&gt;%. Stopping node processes."&lt;/span&gt;
        killall &lt;span class="nt"&gt;-SIGINT&lt;/span&gt; node
    &lt;span class="k"&gt;fi
    &lt;/span&gt;&lt;span class="nb"&gt;sleep &lt;/span&gt;5  &lt;span class="c"&gt;# Check every 5 seconds&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the script and save it as &lt;code&gt;monitor_ram.sh&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Explanation of the Script
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;LIMIT&lt;/code&gt;&lt;/strong&gt;: Sets the threshold for RAM usage. You can adjust this value as needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;get_ram_usage&lt;/code&gt;&lt;/strong&gt;: Calculates current memory usage using the &lt;code&gt;free&lt;/code&gt; command.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Main Loop&lt;/code&gt;&lt;/strong&gt;: Continuously monitors memory usage and stops all Node.js processes if the limit is exceeded.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How to Use the Script
&lt;/h2&gt;

&lt;p&gt;Make the script executable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x monitor_ram.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./monitor_ram.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script will monitor your RAM usage and stop the development server if the usage exceeds the defined limit.&lt;/p&gt;

&lt;p&gt;Here’s a screenshot of the script in action:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fnqflmdf1npsyd56khnj2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fnqflmdf1npsyd56khnj2.png" alt="Image description" width="542" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example, when the RAM usage hits 95%, the script successfully terminates the Node.js processes, reducing the RAM usage and keeping the system responsive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This script provides a simple and effective way to prevent system crashes due to high memory usage during Next.js development. Although the example provided here is specifically for Linux-based systems like Debian or Ubuntu, you can adapt the script for macOS or Windows as well. If the Bash script doesn't work out of the box, you can always ask ChatGPT for help to tailor it to your operating system.&lt;/p&gt;

&lt;p&gt;Moreover, the concept isn't limited to monitoring RAM for Next.js. You can modify the script to work with other technologies by following the same principle: monitor resource usage and terminate services or processes that are consuming too much memory. Feel free to experiment and expand on this idea!&lt;/p&gt;

&lt;p&gt;If you have any questions or suggestions, let me know in the comments. Happy coding!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>performance</category>
      <category>bash</category>
      <category>linux</category>
    </item>
    <item>
      <title>Menghitung Batas Maksimal Ukuran File di JavaScript</title>
      <dc:creator>Kamiswara Angga W.</dc:creator>
      <pubDate>Sun, 24 Jul 2022 02:15:23 +0000</pubDate>
      <link>https://forem.com/anggakswr/menghitung-batas-maksimalukuran-file-di-javascript-56p2</link>
      <guid>https://forem.com/anggakswr/menghitung-batas-maksimalukuran-file-di-javascript-56p2</guid>
      <description>&lt;p&gt;Di dalam framework JavaScript modern, ketika kita upload file, biasanya kita bikin function handler untuk menangani jika terjadi perubahan pada isi dari input bertipe file. Misalnya di &lt;strong&gt;Vue JS&lt;/strong&gt; seringnya seperti ini:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;fileChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fileError&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;File size is too large (max 10 MB)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&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="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&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;Maksud dari code di atas adalah, jika ukuran file yang dipilih lebih dari 10 MB, maka akan muncul pesan error. Jika ukuran file kurang dari atau sama dengan 10 MB, maka file akan ditaruh di dalam state.&lt;/p&gt;




&lt;p&gt;Kenapa kita harus tulis code &lt;strong&gt;(1024 * 1024)&lt;/strong&gt; di code kita? Kenapa kita gak langsung tuliskan &lt;strong&gt;1048576&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Karena ada perbedaan perhitungan ukuran file di sistem operasi yang berbeda. Misal perhitungan ukuran file di &lt;strong&gt;Windows&lt;/strong&gt; berbeda dengan &lt;strong&gt;Linux Ubuntu&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;Perhitungan file di Windows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F97fcflyx3mglc35oia90.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F97fcflyx3mglc35oia90.jpeg" alt="Windows file calculation" width="624" height="62"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perhitungan file di Ubuntu Linux:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdwwdaf2hd75pz3upwscj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdwwdaf2hd75pz3upwscj.png" alt="Ubuntu Linux file calculation" width="644" height="512"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.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%2Fbf8xysszpry0pgx2jz0q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fbf8xysszpry0pgx2jz0q.png" alt="Stackoverflow explanation" width="651" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Baca lebih lanjut:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://askubuntu.com/questions/341143/why-same-file-shows-different-sizes-in-different-operating-systems" rel="noopener noreferrer"&gt;https://askubuntu.com/questions/341143/why-same-file-shows-different-sizes-in-different-operating-systems&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Dengan solusi ini, perbedaan perhitungan di OS yang berbeda bisa diatasi, solusi menurutmu kaya gimana?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Calculating Maximum File Size Limit in JavaScript</title>
      <dc:creator>Kamiswara Angga W.</dc:creator>
      <pubDate>Sun, 24 Jul 2022 02:09:49 +0000</pubDate>
      <link>https://forem.com/anggakswr/calculating-maximum-file-size-limit-in-javascript-2k1f</link>
      <guid>https://forem.com/anggakswr/calculating-maximum-file-size-limit-in-javascript-2k1f</guid>
      <description>&lt;p&gt;In modern JavaScript frameworks, when we upload a file, we usually create a function handler to handle if there is a change in the contents of the input file type. For example in &lt;strong&gt;Vue JS&lt;/strong&gt; it's often like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;fileChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fileError&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;File size is too large (max 10 MB)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&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="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&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;The purpose of the code above is, if the selected file size is more than 10 MB, an error message will appear. If the file size is less than or equal to 10 MB, then the file will be put in state.&lt;/p&gt;




&lt;p&gt;Why we need to calculate &lt;strong&gt;(1024 * 1024)&lt;/strong&gt; in our code? Why don't we just replace the code with &lt;strong&gt;1048576&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Because there are differences in file size calculations in different operating systems. For example, the calculation of file size in &lt;strong&gt;Windows&lt;/strong&gt; is different from &lt;strong&gt;Ubuntu Linux&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;File calculation in Windows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F97fcflyx3mglc35oia90.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F97fcflyx3mglc35oia90.jpeg" alt="Windows file calculation" width="624" height="62"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;File calculation in Ubuntu Linux:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdwwdaf2hd75pz3upwscj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdwwdaf2hd75pz3upwscj.png" alt="Ubuntu Linux file calculation" width="644" height="512"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.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%2Fbf8xysszpry0pgx2jz0q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fbf8xysszpry0pgx2jz0q.png" alt="Stackoverflow explanation" width="651" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More on this matter:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://askubuntu.com/questions/341143/why-same-file-shows-different-sizes-in-different-operating-systems" rel="noopener noreferrer"&gt;https://askubuntu.com/questions/341143/why-same-file-shows-different-sizes-in-different-operating-systems&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With this solution, the difference in calculations in different OS can be overcome, what do you think is the solution?&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>vue</category>
      <category>nuxt</category>
    </item>
    <item>
      <title>Chart JS di Nuxt JS</title>
      <dc:creator>Kamiswara Angga W.</dc:creator>
      <pubDate>Fri, 22 Jul 2022 09:45:00 +0000</pubDate>
      <link>https://forem.com/anggakswr/chart-js-di-nuxt-js-14id</link>
      <guid>https://forem.com/anggakswr/chart-js-di-nuxt-js-14id</guid>
      <description>&lt;p&gt;Lihat cara saya menggunakan &lt;strong&gt;Chart JS&lt;/strong&gt; di &lt;strong&gt;Nuxt JS&lt;/strong&gt; menggunakan &lt;strong&gt;vue-chartjs 3.5.1&lt;/strong&gt;. Omong-omong, saya menggunakan &lt;strong&gt;Nuxt 2&lt;/strong&gt; dengan &lt;strong&gt;Vue 2&lt;/strong&gt; di dalamnya, dan saya menggunakan &lt;strong&gt;Tailwind CSS&lt;/strong&gt; dalam proyek saya. Pastikan dokumentasi &lt;strong&gt;Chart JS&lt;/strong&gt; yang kamu buka adalah versi &lt;em&gt;2.9.4&lt;/em&gt; karena tutorial ini memberi tahu kamu tentang versi &lt;em&gt;2.9.4&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Tambahkan 2 &lt;em&gt;dependency&lt;/em&gt; ini ke package.json
&lt;/h2&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;"dependencies"&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;"chart.js"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2.9.4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"vue-chartjs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^3.5.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;Jalankan &lt;strong&gt;yarn install&lt;/strong&gt; atau &lt;strong&gt;npm install&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. chart.js plugin file
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F5srenzfq5n77iljbdxy6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F5srenzfq5n77iljbdxy6.png" alt="chart.js file" width="266" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Buat file baru di folder &lt;strong&gt;plugins&lt;/strong&gt; di proyek Nuxt punyamu, jika folder &lt;strong&gt;plugins&lt;/strong&gt; belum ada, buat saja. File baru ini dapat diberi nama apa saja, tetapi kita akan menamainya &lt;strong&gt;chart.js&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Isi dari file &lt;strong&gt;chart.js&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Bar&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue-chartjs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;component&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BarChart&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;extends&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Bar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;responsive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;maintainAspectRatio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;legend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&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;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;watch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;renderChart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;options&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;span class="nf"&gt;mounted&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;renderChart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;options&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;h2&gt;
  
  
  3. nuxt.config.js
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@/plugins/chart.js&lt;/span&gt;&lt;span class="dl"&gt;'&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;Tambahkan plugin &lt;strong&gt;chart.js&lt;/strong&gt; ke file &lt;strong&gt;nuxt.config.js&lt;/strong&gt; di property &lt;strong&gt;plugins&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Buat component
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"p-2 border border-gray-500 mt-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"block mb-2 font-bold"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; Coba Chart &lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;client-only&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;BarChart&lt;/span&gt; &lt;span class="na"&gt;:data=&lt;/span&gt;&lt;span class="s"&gt;"chartData"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/client-only&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;penilaian&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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;span class="na"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;chartData&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;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;datasets&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;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rgba(20, 255, 0, 0.3)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;borderColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rgba(100, 255, 0, 1)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;borderWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&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;span class="p"&gt;}&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;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Coba contoh &lt;strong&gt;component&lt;/strong&gt; ini.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Hasilnya
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzra491bohaly7uykg2w3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzra491bohaly7uykg2w3.png" alt="Chart JS in Nuxt JS" width="627" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kurang lebih tampilannya seperti ini. Chart ini disebut &lt;strong&gt;BarChart&lt;/strong&gt;, ada juga jenis chart lain di &lt;strong&gt;Chart JS&lt;/strong&gt;. Untuk mengetahui lebih lanjut dan mempelajari tentang konfigurasi, kamu dapat lihat dokumentasinya di:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://www.chartjs.org/docs/2.9.4/" rel="noopener noreferrer"&gt;https://www.chartjs.org/docs/2.9.4/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Chart JS in Nuxt JS</title>
      <dc:creator>Kamiswara Angga W.</dc:creator>
      <pubDate>Fri, 22 Jul 2022 09:37:00 +0000</pubDate>
      <link>https://forem.com/anggakswr/chart-js-in-nuxt-js-4hjf</link>
      <guid>https://forem.com/anggakswr/chart-js-in-nuxt-js-4hjf</guid>
      <description>&lt;p&gt;Check out how I use &lt;strong&gt;Chart JS&lt;/strong&gt; in &lt;strong&gt;Nuxt JS&lt;/strong&gt; using &lt;strong&gt;vue-chartjs 3.5.1&lt;/strong&gt;. By the way, I use &lt;strong&gt;Nuxt 2&lt;/strong&gt; with &lt;strong&gt;Vue 2&lt;/strong&gt; in it, and I use &lt;strong&gt;Tailwind CSS&lt;/strong&gt; in my project. Make sure the &lt;strong&gt;Chart JS&lt;/strong&gt; documentation that you open is version &lt;em&gt;2.9.4&lt;/em&gt; because this tutorial tells you aboutu version &lt;em&gt;2.9.4&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Add these two dependencies to our package.json
&lt;/h2&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;"dependencies"&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;"chart.js"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2.9.4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"vue-chartjs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^3.5.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;Run &lt;strong&gt;yarn install&lt;/strong&gt; or &lt;strong&gt;npm install&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. chart.js plugin file
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F5srenzfq5n77iljbdxy6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F5srenzfq5n77iljbdxy6.png" alt="chart.js file" width="266" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a new file in the &lt;strong&gt;plugins&lt;/strong&gt; folder in our Nuxt project, if the &lt;strong&gt;plugins&lt;/strong&gt; folder doesn't exist yet, just create it. This new file can be given any name, but we will name it &lt;strong&gt;chart.js&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The content of the &lt;strong&gt;chart.js&lt;/strong&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Bar&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue-chartjs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;component&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BarChart&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;extends&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Bar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;responsive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;maintainAspectRatio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;legend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&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;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;watch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;renderChart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;options&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;span class="nf"&gt;mounted&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;renderChart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;options&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;h2&gt;
  
  
  3. nuxt.config.js
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@/plugins/chart.js&lt;/span&gt;&lt;span class="dl"&gt;'&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;Add the &lt;strong&gt;chart.js&lt;/strong&gt; plugin to the &lt;strong&gt;nuxt.config.js&lt;/strong&gt; file in the &lt;strong&gt;plugins&lt;/strong&gt; property.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Create the component
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"p-2 border border-gray-500 mt-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"block mb-2 font-bold"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; Coba Chart &lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;client-only&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;BarChart&lt;/span&gt; &lt;span class="na"&gt;:data=&lt;/span&gt;&lt;span class="s"&gt;"chartData"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/client-only&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;penilaian&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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;span class="na"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;chartData&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;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;datasets&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;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rgba(20, 255, 0, 0.3)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;borderColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rgba(100, 255, 0, 1)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;borderWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&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;span class="p"&gt;}&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;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try this example component.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. The result
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzra491bohaly7uykg2w3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzra491bohaly7uykg2w3.png" alt="Chart JS in Nuxt JS" width="627" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More or less it looks like this. This chart is called &lt;strong&gt;BarChart&lt;/strong&gt;, there are also other types of charts in &lt;strong&gt;Chart JS&lt;/strong&gt;. To know more and learn about the configuration, you can check the documentation:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://www.chartjs.org/docs/2.9.4/" rel="noopener noreferrer"&gt;https://www.chartjs.org/docs/2.9.4/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>chartjs</category>
      <category>nuxt</category>
    </item>
    <item>
      <title>Deploy Nuxt to Vercel</title>
      <dc:creator>Kamiswara Angga W.</dc:creator>
      <pubDate>Mon, 31 Jan 2022 19:22:39 +0000</pubDate>
      <link>https://forem.com/anggakswr/deploy-nuxt-to-vercel-5cjh</link>
      <guid>https://forem.com/anggakswr/deploy-nuxt-to-vercel-5cjh</guid>
      <description>&lt;p&gt;Having trouble deploying &lt;strong&gt;Nuxt JS&lt;/strong&gt; application to &lt;strong&gt;Vercel&lt;/strong&gt;? Yes, me too. Here's how I deploy &lt;strong&gt;Nuxt JS&lt;/strong&gt; to &lt;strong&gt;Vercel&lt;/strong&gt;. This method is still running on February 1, 2022. Maybe in the future the method of deploying &lt;strong&gt;Nuxt&lt;/strong&gt; applications on &lt;strong&gt;Vercel&lt;/strong&gt; will change and this method can no longer be used.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Create a file called vercel.json in the project root
&lt;/h2&gt;

&lt;p&gt;This is the contents of the code from the vercel.json file:&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;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"builds"&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"nuxt.config.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;"use"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@nuxtjs/vercel-builder"&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;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;h2&gt;
  
  
  2. Login to Vercel, then click New Project
&lt;/h2&gt;

&lt;p&gt;After logging in, you will be redirected to a kind of dashboard page. Click the &lt;strong&gt;New Project&lt;/strong&gt; button to create a new project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhergzn3etyi76qq1b500.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhergzn3etyi76qq1b500.jpg" alt="Vercel New Project button" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Import project from Git repo
&lt;/h2&gt;

&lt;p&gt;Find your project and click &lt;strong&gt;Import&lt;/strong&gt;. I think this is the easiest way to import our project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fsqhpxo4suooa3gvffkso.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fsqhpxo4suooa3gvffkso.jpg" alt="Vercel Import project button" width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Configure Project
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Vercel&lt;/strong&gt; can automatically detect what technology / &lt;em&gt;framework&lt;/em&gt; we are using in &lt;em&gt;FRAMEWORK PRESET&lt;/em&gt;. In the &lt;strong&gt;Configure Project&lt;/strong&gt; section, click &lt;strong&gt;Build and Output Settings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F4h99dxzkoszof3nkjide.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F4h99dxzkoszof3nkjide.jpg" alt="Vercel Configure Project" width="775" height="663"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Build &amp;amp; Development Settings
&lt;/h2&gt;

&lt;p&gt;Change &lt;em&gt;OUTPUT DIRECTORY&lt;/em&gt; to &lt;strong&gt;.nuxt/dist&lt;/strong&gt; by clicking &lt;em&gt;OVERRIDE&lt;/em&gt; on the right.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fggkajfgaiyq4pbxnbr33.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fggkajfgaiyq4pbxnbr33.jpg" alt="Vercel Build &amp;amp; Development Settings" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. If you prefer yarn
&lt;/h2&gt;

&lt;p&gt;If you prefer to use &lt;strong&gt;yarn&lt;/strong&gt;, change it to something like this. Click &lt;strong&gt;Save&lt;/strong&gt;, and you're done. Just wait, later your application can be accessed via the URL provided. Usually it will be quick or takes at most 24 hours.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhyt74c2h4djl4qziev1m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhyt74c2h4djl4qziev1m.jpg" alt="Yarn Deployment Vercel" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7. That's all
&lt;/h2&gt;

&lt;p&gt;Deploying for free on &lt;strong&gt;Vercel&lt;/strong&gt; is useful for testing our application or just want to show our client the appearance or UI.&lt;/p&gt;




&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>vue</category>
      <category>nuxt</category>
      <category>vercel</category>
      <category>deploy</category>
    </item>
    <item>
      <title>Deploy Nuxt ke Vercel</title>
      <dc:creator>Kamiswara Angga W.</dc:creator>
      <pubDate>Mon, 31 Jan 2022 19:10:26 +0000</pubDate>
      <link>https://forem.com/anggakswr/deploy-nuxt-ke-vercel-4im1</link>
      <guid>https://forem.com/anggakswr/deploy-nuxt-ke-vercel-4im1</guid>
      <description>&lt;p&gt;Mengalami masalah ketika &lt;em&gt;deploy&lt;/em&gt; aplikasi &lt;strong&gt;Nuxt JS&lt;/strong&gt; ke &lt;strong&gt;Vercel&lt;/strong&gt;? Ya, saya juga. Berikut ini cara saya &lt;em&gt;deploy&lt;/em&gt; &lt;strong&gt;Nuxt JS&lt;/strong&gt; ke &lt;strong&gt;Vercel&lt;/strong&gt;. Cara ini masih jalan pada 1 Februari 2022. Mungkin di masa depan cara &lt;em&gt;deploy&lt;/em&gt; aplikasi &lt;strong&gt;Nuxt&lt;/strong&gt; di &lt;strong&gt;Vercel&lt;/strong&gt; akan berubah dan cara ini sudah tidak bisa dipakai lagi.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Bikin file bernama vercel.json di root project
&lt;/h2&gt;

&lt;p&gt;Ini isi &lt;em&gt;code&lt;/em&gt; dari file &lt;strong&gt;vercel.json&lt;/strong&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="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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"builds"&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"nuxt.config.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;"use"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@nuxtjs/vercel-builder"&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;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;h2&gt;
  
  
  2. Login di Vercel, lalu klik New Project
&lt;/h2&gt;

&lt;p&gt;Setelah &lt;em&gt;login&lt;/em&gt;, maka kamu akan diarahkan ke semacam halaman &lt;em&gt;dashboard&lt;/em&gt;. Klik tombol &lt;strong&gt;New Project&lt;/strong&gt; untuk bikin &lt;em&gt;project&lt;/em&gt; baru.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhergzn3etyi76qq1b500.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhergzn3etyi76qq1b500.jpg" alt="Vercel New Project button" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Import project dari Git repo
&lt;/h2&gt;

&lt;p&gt;Cari &lt;em&gt;project&lt;/em&gt;-mu dan klik &lt;strong&gt;Import&lt;/strong&gt;. Menurut saya ini adalah cara paling mudah untuk &lt;em&gt;import project&lt;/em&gt; kita.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fsqhpxo4suooa3gvffkso.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fsqhpxo4suooa3gvffkso.jpg" alt="Vercel Import project button" width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Configure Project
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Vercel&lt;/strong&gt; bisa otomatis mendeteksi teknologi / &lt;em&gt;framework&lt;/em&gt; apa yang kita gunakan di &lt;strong&gt;FRAMEWORK PRESET&lt;/strong&gt;. Di bagian &lt;strong&gt;Configure Project&lt;/strong&gt;, klik &lt;strong&gt;Build and Output Settings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F4h99dxzkoszof3nkjide.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F4h99dxzkoszof3nkjide.jpg" alt="Vercel Configure Project" width="775" height="663"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Build &amp;amp; Development Settings
&lt;/h2&gt;

&lt;p&gt;Ganti &lt;strong&gt;OUTPUT DIRECTORY&lt;/strong&gt; jadi &lt;strong&gt;.nuxt/dist&lt;/strong&gt; dengan cara&lt;br&gt;
klik &lt;strong&gt;OVERRIDE&lt;/strong&gt; di sebelah kanan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fggkajfgaiyq4pbxnbr33.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fggkajfgaiyq4pbxnbr33.jpg" alt="Vercel Build &amp;amp; Development Settings" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Jika kamu lebih suka yarn
&lt;/h2&gt;

&lt;p&gt;Kalau kamu lebih suka pakai &lt;strong&gt;yarn&lt;/strong&gt;, ubah jadi seperti ini. Klik &lt;strong&gt;Save&lt;/strong&gt;, dan selesai. Tunggu saja, nanti aplikasimu dapat diakses melalui URL yang tersedia. Biasanya butuh waktu cepat atau paling lama 24 jam.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhyt74c2h4djl4qziev1m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhyt74c2h4djl4qziev1m.jpg" alt="Yarn Deployment Vercel" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Sekian
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Deploy&lt;/em&gt; secara gratis di &lt;strong&gt;Vercel&lt;/strong&gt; bermanfaat buat &lt;em&gt;testing&lt;/em&gt; aplikasi kita atau sekedar pengen nunjukkin ke &lt;em&gt;client&lt;/em&gt; mengenai tampilan / &lt;em&gt;UI website&lt;/em&gt; yang udah jadi.&lt;/p&gt;




&lt;p&gt;Terimakasih sudah membaca.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Set Up Tailwind CSS di Project HTML Biasa</title>
      <dc:creator>Kamiswara Angga W.</dc:creator>
      <pubDate>Sun, 07 Nov 2021 06:53:06 +0000</pubDate>
      <link>https://forem.com/anggakswr/set-up-tailwind-css-di-project-html-biasa-3g58</link>
      <guid>https://forem.com/anggakswr/set-up-tailwind-css-di-project-html-biasa-3g58</guid>
      <description>&lt;p&gt;Sebenarnya di &lt;a href="https://tailwindcss.com/docs/installation" rel="noopener noreferrer"&gt;situs web Tailwind CSS&lt;/a&gt; sudah ada dokumentasi tentang beberapa cara untuk menginstal &lt;strong&gt;tailwind css&lt;/strong&gt;. Namun saya menemukan dokumentasinya terlalu panjang dan agak membingungkan. Jadi saya memutuskan untuk membuat tutorial saya sendiri. Saya harap catatan saya dapat bermanfaat bagi kamu juga.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Bikin file css
&lt;/h2&gt;

&lt;p&gt;Pertama bikin file &lt;em&gt;css&lt;/em&gt; dulu terserah namanya apa saja. Dalam hal ini saya beri nama &lt;strong&gt;global.css&lt;/strong&gt;. Lokasi dari file ini juga terserah. Dalam hal ini biasanya saya taruh di folder &lt;strong&gt;/assets/css/&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* global.css */&lt;/span&gt;

&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;utilities&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/apply"&gt;@apply&lt;/a&gt; directives&lt;/strong&gt; juga bisa ditaruh di file ini.&lt;/p&gt;

&lt;p&gt;Di root folder project kita, jalankan perintah ini. Fungsinya untuk mengubah file &lt;strong&gt;global.css&lt;/strong&gt; tadi menjadi file tailwind.css. Nantinya file &lt;strong&gt;tailwind.css&lt;/strong&gt; yang dipanggil di file &lt;em&gt;html&lt;/em&gt; kita, bukan &lt;strong&gt;&lt;em&gt;global.css&lt;/em&gt;&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;npx tailwindcss -i ./html/assets/css/global.css -o ./html/assets/css/tailwind.css
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setiap kali &lt;strong&gt;global.css&lt;/strong&gt; berubah, perintah ini harus dijalankan lagi.&lt;/p&gt;

&lt;p&gt;Sebenarnya ada perintah &lt;em&gt;watch&lt;/em&gt; dengan menambahkan &lt;strong&gt;-w&lt;/strong&gt; di akhir perintah ini. Tapi saya tidak tahu kenapa, laptop saya membeku ketika saya menggunakan perintah &lt;strong&gt;-w&lt;/strong&gt;. Meskipun ini adalah laptop &lt;strong&gt;Core i5&lt;/strong&gt; dan dengan memori &lt;strong&gt;16 GB&lt;/strong&gt;. Laptop teman saya juga mengalami hal yang sama. Itu sebabnya saya tidak pernah menggunakan perintah &lt;strong&gt;-w&lt;/strong&gt; lagi.&lt;/p&gt;

&lt;p&gt;Sebenarnya perintah &lt;em&gt;watch&lt;/em&gt; ini berguna untuk &lt;em&gt;membangun&lt;/em&gt; file &lt;strong&gt;tailwind.css&lt;/strong&gt; secara otomatis setiap kali file &lt;strong&gt;global.css&lt;/strong&gt; berubah. Tapi karena ada masalah sebelumnya, jadi saya tidak pernah menggunakannya.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Menggunakan tailwind.config.js
&lt;/h2&gt;

&lt;p&gt;File &lt;strong&gt;tailwind.config.js&lt;/strong&gt; juga dapat digunakan dalam &lt;em&gt;proyek html&lt;/em&gt; biasa seperti ini. Buat saja file dengan mengetikkan perintah di bawah ini di root folder project kita.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx tailwindcss init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;File ini akan otomatis terdeteksi saat menjalankan perintah &lt;em&gt;convert&lt;/em&gt; tadi (perintah &lt;strong&gt;npx&lt;/strong&gt; sebelumnya). Biasanya saya menjalankan perintah &lt;em&gt;convert&lt;/em&gt; di root project.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Panggil file tailwind.css di file html kita
&lt;/h2&gt;

&lt;p&gt;Kamu bisa panggil file &lt;strong&gt;tailwind.css&lt;/strong&gt; tadi dengan cara seperti ini:&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;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"./assets/css/tailwind.css"&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;
  
  
  Penutup
&lt;/h2&gt;

&lt;p&gt;Catatan: &lt;strong&gt;npx&lt;/strong&gt; akan ada satu paket dengan &lt;strong&gt;npm&lt;/strong&gt; versi 5.2 ke atas.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Set Up Regular HTML Project with Tailwind CSS</title>
      <dc:creator>Kamiswara Angga W.</dc:creator>
      <pubDate>Sun, 07 Nov 2021 06:07:17 +0000</pubDate>
      <link>https://forem.com/anggakswr/set-up-regular-html-project-with-tailwind-css-4gi2</link>
      <guid>https://forem.com/anggakswr/set-up-regular-html-project-with-tailwind-css-4gi2</guid>
      <description>&lt;p&gt;Actually on the &lt;a href="https://tailwindcss.com/docs/installation" rel="noopener noreferrer"&gt;Tailwind CSS website&lt;/a&gt; there is already documentation on several ways to install &lt;strong&gt;tailwind css&lt;/strong&gt;. However I find the documentation too long and a bit confusing. So I decided to make my own tutorial. I hope my notes can be useful for you too.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Create the css file
&lt;/h2&gt;

&lt;p&gt;First create a &lt;em&gt;css&lt;/em&gt; file, whatever the name is. In this case I named it &lt;strong&gt;global.css&lt;/strong&gt;. The location of this file is also up to you. In this case I usually put it in the &lt;strong&gt;/assets/css/&lt;/strong&gt; folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* global.css */&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;utilities&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/apply"&gt;@apply&lt;/a&gt; directives&lt;/strong&gt; can also be put in this file.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Convert the css file into tailwind.css
&lt;/h2&gt;

&lt;p&gt;In the root of our project folder, run this command to convert the &lt;strong&gt;global.css&lt;/strong&gt; file into a &lt;strong&gt;tailwind.css&lt;/strong&gt; file. Later the &lt;strong&gt;tailwind.css&lt;/strong&gt; file is called in our &lt;em&gt;html&lt;/em&gt; file, not the &lt;strong&gt;global.css&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;npx tailwindcss -i ./html/assets/css/global.css -o ./html/assets/css/tailwind.css
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Whenever &lt;strong&gt;global.css&lt;/strong&gt; changes, this command must be run again.&lt;/p&gt;

&lt;p&gt;Actually there is a &lt;em&gt;watch&lt;/em&gt; command by adding &lt;strong&gt;-w&lt;/strong&gt; at the end of this command. But I don't know why, my laptop freeze when I use the &lt;strong&gt;-w&lt;/strong&gt; command. Even though it is a &lt;strong&gt;Core i5&lt;/strong&gt; laptop and with &lt;strong&gt;16 GB&lt;/strong&gt; memory. My friend's laptop also experienced the same thing. That's why I never use the &lt;strong&gt;-w&lt;/strong&gt; command again.&lt;/p&gt;

&lt;p&gt;Actually this &lt;em&gt;watch&lt;/em&gt; command is useful to &lt;em&gt;build&lt;/em&gt; &lt;strong&gt;tailwind.css&lt;/strong&gt; file automatically whenever &lt;strong&gt;global.css&lt;/strong&gt; file changes. But because there was a problem, so I never used it.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Using the tailwind.config.js
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;tailwind.config.js&lt;/strong&gt; file can also be used in a regular &lt;em&gt;html project&lt;/em&gt; like this one. Just make the file by typing the command below in the root of our project folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx tailwindcss init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This file will be automatically detected when running the &lt;em&gt;convert&lt;/em&gt; command earlier (previous &lt;strong&gt;npx&lt;/strong&gt; command). Usually I run the &lt;em&gt;convert&lt;/em&gt; command in the project root.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Call the tailwind.css file in our html file
&lt;/h2&gt;

&lt;p&gt;You can call the &lt;strong&gt;tailwind.css&lt;/strong&gt; file in the &lt;em&gt;html&lt;/em&gt; file, like this:&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;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"./assets/css/tailwind.css"&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;
  
  
  Done
&lt;/h2&gt;

&lt;p&gt;Note: &lt;strong&gt;npx&lt;/strong&gt; is included with &lt;strong&gt;npm&lt;/strong&gt; version 5.2 and above.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
