<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Folke Lemaitre</title>
    <description>The latest articles on DEV Community by Folke Lemaitre (@folke).</description>
    <link>https://dev.to/folke</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%2F247465%2Fa598e8af-87a7-4e7e-a60f-b2f65aed3124.jpg</url>
      <title>DEV Community: Folke Lemaitre</title>
      <link>https://dev.to/folke</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/folke"/>
    <language>en</language>
    <item>
      <title>🚀⚡️ ts-node on steroids</title>
      <dc:creator>Folke Lemaitre</dc:creator>
      <pubDate>Wed, 09 Dec 2020 16:26:02 +0000</pubDate>
      <link>https://dev.to/folke/super-fast-on-the-fly-transpilation-of-modern-js-and-typescript-using-esbuild-1386</link>
      <guid>https://dev.to/folke/super-fast-on-the-fly-transpilation-of-modern-js-and-typescript-using-esbuild-1386</guid>
      <description>&lt;p&gt;I just released &lt;a href="https://github.com/folke/esbuild-runner"&gt;esbuild-runner&lt;/a&gt;. It makes it easy to run arbitrary code or tests &lt;strong&gt;without needing to build&lt;/strong&gt; your whole project. It's a great way to improve your development workflow. Underneath it uses the fantastic and super fast javascript bundler &lt;a href="https://github.com/evanw/esbuild"&gt;esbuild&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Usage
&lt;/h2&gt;

&lt;p&gt;The easiest way to use &lt;strong&gt;esbuild-runner&lt;/strong&gt; is to install it globally and use the included &lt;code&gt;esr&lt;/code&gt; binary.&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="nv"&gt;$ &lt;/span&gt;esr hello-world.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alternatively, you can &lt;em&gt;require&lt;/em&gt; &lt;strong&gt;esbuild-runner&lt;/strong&gt; within any nodejs process to include realtime transpilation:&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="nv"&gt;$ &lt;/span&gt;node &lt;span class="nt"&gt;-r&lt;/span&gt; esbuild-runner/register hello-world.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to use &lt;strong&gt;esbuild-runner&lt;/strong&gt; with Jest, you need to configure a &lt;a href="https://jestjs.io/docs/en/configuration.html#transform-objectstring-pathtotransformer--pathtotransformer-object"&gt;Jest transform&lt;/a&gt; in your &lt;code&gt;jest.config.js&lt;/code&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="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;transform&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="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.ts$&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;esbuild-runner/jest&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;h2&gt;
  
  
  ⚙️ Configuration
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;esr&lt;/code&gt; provides two different ways to transpile your code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;bundling&lt;/strong&gt; &lt;em&gt;(default)&lt;/em&gt;: this transpiles the script and all its dependencies in typically one invocation of &lt;strong&gt;esbuild&lt;/strong&gt;. Dependencies defined in &lt;code&gt;package.json&lt;/code&gt; or &lt;code&gt;node_modules&lt;/code&gt; will never be transpiled. Running &lt;code&gt;esr&lt;/code&gt; will &lt;strong&gt;always&lt;/strong&gt; transpile the code. No caching is used.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;transform&lt;/strong&gt; &lt;em&gt;(&lt;code&gt;--cache&lt;/code&gt;)&lt;/em&gt;: this method will invoke &lt;strong&gt;esbuild&lt;/strong&gt; for &lt;strong&gt;every source file&lt;/strong&gt;, but will cache the result. This means that the initial run will be slower, but after that, only changed source files will be transpiled.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;bin/esr.js &lt;span class="nt"&gt;--help&lt;/span&gt;
Usage: esr &lt;span class="o"&gt;[&lt;/span&gt;options] &amp;lt;source-file&amp;gt; &lt;span class="o"&gt;[&lt;/span&gt;file-options]

  &lt;span class="nt"&gt;--cache&lt;/span&gt;       Transform on a file per file basis and cache code
  &lt;span class="nt"&gt;--clearCache&lt;/span&gt;  Clear transform cache
  &lt;span class="nt"&gt;--help&lt;/span&gt;|-h     Display this &lt;span class="nb"&gt;help &lt;/span&gt;message

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  📦 Installation
&lt;/h2&gt;

&lt;p&gt;Simply install the &lt;strong&gt;esbuild-runner&lt;/strong&gt; npm package using your favorite package manager.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;globally ...
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; esbuild-runner
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;... or locally in your project
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm add &lt;span class="nt"&gt;--dev&lt;/span&gt; esbuild-runner
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  👋 Contributing
&lt;/h2&gt;

&lt;p&gt;Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚖ License
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/folke/esbuild-runner/blob/main/LICENSE"&gt;Apache 2.0&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>typescript</category>
    </item>
    <item>
      <title>🚀 Process Monitor for Node.js</title>
      <dc:creator>Folke Lemaitre</dc:creator>
      <pubDate>Fri, 13 Mar 2020 12:02:52 +0000</pubDate>
      <link>https://dev.to/folke/process-monitor-for-node-js-c0c</link>
      <guid>https://dev.to/folke/process-monitor-for-node-js-c0c</guid>
      <description>&lt;p&gt;We just released &lt;strong&gt;v2.2.0&lt;/strong&gt; of &lt;a href="https://github.com/folke/ultra-runner"&gt;Ultra Runner&lt;/a&gt; with a new monitoring feature! Running &lt;code&gt;ultra --monitor&lt;/code&gt; will show a process list similar to &lt;code&gt;top&lt;/code&gt;, but only for &lt;strong&gt;Node.js&lt;/strong&gt; processes.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;sorted&lt;/strong&gt; by CPU usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;tree&lt;/strong&gt; view of parent/child processes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;package&lt;/strong&gt; or directory where the command was executed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cpu &amp;amp; memory&lt;/strong&gt; usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;clean&lt;/strong&gt; command line (use regular &lt;code&gt;top&lt;/code&gt; to see the messy difference 😄) &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Should work on Macos &amp;amp; Linux and &lt;em&gt;probably&lt;/em&gt; on Windows (let me know if you have any issues)&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>🚀 Monorepo Workspace, a vs-code extension to manage monorepos with multi-root workspaces. Supports Lerna, Yarn, Pnpm and Rush</title>
      <dc:creator>Folke Lemaitre</dc:creator>
      <pubDate>Thu, 05 Mar 2020 17:25:42 +0000</pubDate>
      <link>https://dev.to/folke/monorepo-workspace-a-vs-code-extension-to-manage-monorepos-with-multi-root-workspaces-supports-lerna-yarn-pnpm-and-rush-1ki0</link>
      <guid>https://dev.to/folke/monorepo-workspace-a-vs-code-extension-to-manage-monorepos-with-multi-root-workspaces-supports-lerna-yarn-pnpm-and-rush-1ki0</guid>
      <description>&lt;p&gt;I just released &lt;a href="https://marketplace.visualstudio.com/items?itemName=folke.vscode-monorepo-workspace"&gt;Monorepo Workspace&lt;/a&gt;, a simple extension to work with monorepos in &lt;strong&gt;VS Code&lt;/strong&gt;. Supported repositories: Lerna, Yarn, Pnpm, Rushjs and recursive package directories.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;All &lt;strong&gt;Monorepo Workspace&lt;/strong&gt; functionality can be found in the command palette. Available commands:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m0U2bBa_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/vscode-monorepo-workspace/master/images/commands.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m0U2bBa_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/vscode-monorepo-workspace/master/images/commands.png" alt="Commands"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Selecting a package:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FppRr9IR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/vscode-monorepo-workspace/master/images/list.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FppRr9IR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/vscode-monorepo-workspace/master/images/list.png" alt="Commands"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Monorepo: Open Package (Current Window)&lt;/code&gt;: open a package from your repository in the current window&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Monorepo: Open Package (New Window)&lt;/code&gt;: open a package from your repository in a new window&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Monorepo: Open Package (Workspace Folder)&lt;/code&gt;: add a package from your repository as a workspace folder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also create workspace folders for all your repository packages with &lt;code&gt;Monorepo: Sync Workspace Folders&lt;/code&gt;:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fQNBOJny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/vscode-monorepo-workspace/master/images/explorer.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fQNBOJny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/vscode-monorepo-workspace/master/images/explorer.png" alt="Commands"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>vscode</category>
    </item>
    <item>
      <title>🚀 Just released ultra-runner 2.0.0! Ultra fast script runner and build tool, with support for lerna, yarn and pnpm monorepos.</title>
      <dc:creator>Folke Lemaitre</dc:creator>
      <pubDate>Wed, 04 Mar 2020 21:18:16 +0000</pubDate>
      <link>https://dev.to/folke/just-released-ultra-runner-2-0-0-ultra-fast-script-runner-and-build-tool-with-support-for-lerna-yarn-and-pnpm-monorepos-4gbj</link>
      <guid>https://dev.to/folke/just-released-ultra-runner-2-0-0-ultra-fast-script-runner-and-build-tool-with-support-for-lerna-yarn-and-pnpm-monorepos-4gbj</guid>
      <description>&lt;p&gt;I've just released &lt;a href="https://github.com/folke/ultra-runner"&gt;Ultra Runner 2.0.0&lt;/a&gt; with lots of new features to run scripts and builds for monorepos.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ Highlights
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;zero-config&lt;/strong&gt;: works out of the box with your existing monorepo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;non-intrusive&lt;/strong&gt;: no need to make any changes to your packages.json files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;workspaces&lt;/strong&gt;: detects packages in existing &lt;code&gt;lerna&lt;/code&gt;, &lt;code&gt;yarn&lt;/code&gt; and &lt;code&gt;pnpm&lt;/code&gt; workspaces, or recusrively searches them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ultra fast builds&lt;/strong&gt;: &lt;code&gt;ultra&lt;/code&gt; keeps track of file changes in your repo and only actually &lt;code&gt;build&lt;/code&gt; a package when needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;parallel builds&lt;/strong&gt;: &lt;code&gt;ultra&lt;/code&gt; builds your packages concurrently by default&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;workspace dependencies&lt;/strong&gt;: workspace dependencies are automatically resolved and used for parallel builds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;execute anything&lt;/strong&gt;: one command to run package scripts, &lt;code&gt;node_modules&lt;/code&gt; binaries or system binaries, recursively in your repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;faster script execution&lt;/strong&gt;: &lt;code&gt;ultra&lt;/code&gt; hijacks any &lt;code&gt;npm&lt;/code&gt;, &lt;code&gt;pnpm&lt;/code&gt;, &lt;code&gt;yarn&lt;/code&gt; and &lt;code&gt;npx&lt;/code&gt; calls for faster execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;concurrency within scripts&lt;/strong&gt;: you can add optional configuration to &lt;code&gt;package.json&lt;/code&gt; to run parts of a script in parallel. No need to change the actual &lt;code&gt;scripts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;filtering&lt;/strong&gt;: filter on package names or subdirectories&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🏃⛰ Smarter, prettier and faster package scripts with Ultra-Runner</title>
      <dc:creator>Folke Lemaitre</dc:creator>
      <pubDate>Wed, 22 Jan 2020 15:58:09 +0000</pubDate>
      <link>https://dev.to/folke/execute-package-scripts-with-ultra-runner-23bc</link>
      <guid>https://dev.to/folke/execute-package-scripts-with-ultra-runner-23bc</guid>
      <description>&lt;p&gt;&lt;strong&gt;Smart&lt;/strong&gt; and &lt;strong&gt;beautiful&lt;/strong&gt; script runner that hijacks any &lt;code&gt;npm run&lt;/code&gt;, &lt;code&gt;yarn&lt;/code&gt; and &lt;code&gt;npx&lt;/code&gt; calls for &lt;strong&gt;ultra&lt;/strong&gt; fast execution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/folke/ultra-runner"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6oKjpvbK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://asciinema.org/a/CHtfDpnEerWurixwICGC01InG.svg" alt="asciicast"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ❓ Why
&lt;/h2&gt;

&lt;p&gt;Use one command to run package scripts, locally installed binaries or system binaries&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;npm run&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;npx&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;yarn&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;yarn exec&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;ultra&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;package.json&lt;/code&gt; scripts&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;./node_modules/.bin/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;system binaries&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🤓 Smart
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Ultra&lt;/strong&gt; parses your &lt;code&gt;package.json&lt;/code&gt; and hijacks any &lt;code&gt;npm run&lt;/code&gt;, &lt;code&gt;yarn&lt;/code&gt; and &lt;code&gt;npx&lt;/code&gt; calls.&lt;br&gt;
Shell operators like &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;, &lt;code&gt;;&lt;/code&gt; and &lt;code&gt;||&lt;/code&gt; are also interpreted.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="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;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yarn lint:ts &amp;amp;&amp;amp; yarn lint:eslint &amp;amp;&amp;amp; yarn lint:docs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint:eslint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx eslint bin/*.js src/*.ts __tests__/*.ts --cache"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint:docs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx markdownlint README.md"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint:ts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx tsc -p tsconfig.build.json --noEmit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint:fix"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yarn lint:eslint --fix"&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;p&gt;Running &lt;code&gt;ultra lint&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9pyMxEA_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-lint.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9pyMxEA_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-lint.png" alt="Ultra Lint"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Running &lt;code&gt;ultra lint:fix&lt;/code&gt; will spawn exactly &lt;strong&gt;one&lt;/strong&gt; child process, directly with the correct command, instead of spawning &lt;code&gt;yarn&lt;/code&gt; intermediately&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iEXoECXU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-lint-fix.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iEXoECXU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-lint-fix.png" alt="Ultra Lint"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ultra&lt;/strong&gt; will additionally execute any configured &lt;code&gt;pre&lt;/code&gt; and &lt;code&gt;post&lt;/code&gt; scripts, just like &lt;code&gt;npm run&lt;/code&gt; and &lt;code&gt;yarn run&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  ⚡ Ultra Fast
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Ultra&lt;/strong&gt; parses your &lt;code&gt;package.json&lt;/code&gt; scripts and will only execute the commands that are really needed. Any script interdependencies are resolved during the parsing stage.&lt;br&gt;
This ensures there's pretty much no overhead in execution by &lt;strong&gt;Ultra&lt;/strong&gt; itself, since it's only running once.&lt;br&gt;
&lt;code&gt;yarn run&lt;/code&gt; or &lt;code&gt;npm run&lt;/code&gt; on the other hand, will spawn new &lt;code&gt;yarn&lt;/code&gt; or &lt;code&gt;npm&lt;/code&gt; child processes as needed by the package scripts.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;npm run&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;npx&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;yarn&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;yarn exec&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;ultra&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;execution overhead &lt;em&gt;(1)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;250ms&lt;/td&gt;
&lt;td&gt;60ms&lt;/td&gt;
&lt;td&gt;220ms&lt;/td&gt;
&lt;td&gt;200ms&lt;/td&gt;
&lt;td&gt;80ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;sup&gt;&lt;strong&gt;1.&lt;/strong&gt; each program was run 10x with the command &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;{scripts:{"true":"true}}&lt;/code&gt; to calculate the execution overhead&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Suppose you would want to run a script that calls 5 other scripts by using &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; and/or &lt;code&gt;post&lt;/code&gt;/&lt;code&gt;pre&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using &lt;code&gt;yarn&lt;/code&gt;, you would have a total overhead of &lt;strong&gt;2.5s&lt;/strong&gt; &lt;em&gt;(10x 250ms)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;ultra&lt;/code&gt;, you hit the overhead only once, so the total overhead would still be &lt;strong&gt;80ms&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To make execution &lt;strong&gt;ultra&lt;/strong&gt; fast, you can configure which &lt;code&gt;scripts&lt;/code&gt; should be ran concurrently.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;❕ there's no need to &lt;strong&gt;switch&lt;/strong&gt; your scripts over to &lt;strong&gt;ultra&lt;/strong&gt;. Even with the optional configuration you can still use &lt;code&gt;yarn&lt;/code&gt; or &lt;code&gt;npm&lt;/code&gt; to run your scripts if you want to.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Example builds:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;yarn&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;
&lt;code&gt;ultra&lt;/code&gt; not concurrent&lt;/th&gt;
&lt;th&gt;
&lt;code&gt;ultra&lt;/code&gt; concurrent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;build &lt;a href="https://github.com/folke/ultra-runner"&gt;Ultra-Runner&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;8.9s&lt;/td&gt;
&lt;td&gt;7.2s&lt;/td&gt;
&lt;td&gt;5.1s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;build &lt;a href="https://github.com/folke/devmoji"&gt;Devmoji&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;16s&lt;/td&gt;
&lt;td&gt;13s&lt;/td&gt;
&lt;td&gt;8s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  👸 Beautiful
&lt;/h3&gt;

&lt;p&gt;There are three output formats that each can be combined with &lt;code&gt;--silent&lt;/code&gt; to hide command output.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;--fancy&lt;/code&gt; is the default. It shows output in a hieracrhical way and uses spinners to see exactly what's happening.&lt;br&gt;
Make sure to check out the animation at the top of this page as well. Every executed step shows the execution time.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QFbLDmLv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-format-fancy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QFbLDmLv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-format-fancy.png" alt="Ultra Lint"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;--fancy&lt;/code&gt; combined with &lt;code&gt;--silent&lt;/code&gt; is useful if you're only interested to see the overview:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S5-QOPaq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-format-fancy-silent.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S5-QOPaq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-format-fancy-silent.png" alt="Ultra Lint"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;--no-fancy&lt;/code&gt; doesn't use spinners and prefixes command output with the command name. This is useful for logging purposes.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k8LUSY3u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-format-no-fancy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k8LUSY3u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-format-no-fancy.png" alt="Ultra Lint"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Combining &lt;code&gt;--no-fancy&lt;/code&gt; with &lt;code&gt;--silent&lt;/code&gt; shows a flat overview:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BWaJ52gY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-format-no-fancy-silent.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BWaJ52gY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-format-no-fancy-silent.png" alt="Ultra Lint"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;--raw&lt;/code&gt; will show the exact ouput as you would expect when running the commands stand alone. If the command you're executing is interactive (reads from stdin), then this is the mode you should use.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0aW9Elby--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-format-raw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0aW9Elby--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-format-raw.png" alt="Ultra Lint"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  📦 Installation
&lt;/h2&gt;

&lt;p&gt;Install with &lt;code&gt;npm&lt;/code&gt; or &lt;code&gt;yarn&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;globally&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; ultra-runner
yarn global &lt;span class="nb"&gt;install &lt;/span&gt;ultra-runner
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;locally inside your project. use with &lt;code&gt;npx ultra&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--dev&lt;/span&gt; ultra-runner
yarn add &lt;span class="nt"&gt;--dev&lt;/span&gt; ultra-runner
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;See optional configuration for information on how to setup concurrent script execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Usage
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ultra &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;span class="go"&gt;Usage: ultra [options]

Options:
  -c|--concurrent  Run the given commands concurrently
  -p|--parallel    alias for --concurrent
  --fancy          enable fancy output, spinners and seperate command output. Default when a TTY (default: true)
  --no-fancy       disables fancy output, spinners and seperate command output. Default when not a TTY. Useful for logging
  --raw            Output only raw command output
  -s|--silent      skip script output. ultra console logs will still be shown
  --color          colorize output (default: true)
  --no-color       don't colorize output
  -d|--dry-run     output what would be executed
  -v|--version     output the version number
  -h, --help       output usage information
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;use &lt;code&gt;--concurrent&lt;/code&gt; to quickly run some commands in parallel. Any of the commands below are valid:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ultra --concurrent lint \; test \; build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ultra --concurrent "lint ; test ; build"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ultra --concurrent "lint &amp;amp;&amp;amp; test &amp;amp;&amp;amp; build"&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;use &lt;code&gt;--dry-run&lt;/code&gt; to see what would be executed. The output is similar to &lt;code&gt;--fancy --silent&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚙️ Optional Configuration
&lt;/h2&gt;

&lt;p&gt;To allow parallel execution of your scripts, you can specify scripts that should run concurrently,&lt;br&gt;
in your &lt;code&gt;package.json&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="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;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint:eslint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx eslint bin/*.js src/*.ts __tests__/*.ts --cache"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint:docs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx markdownlint *.md"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint:ts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx tsc -p tsconfig.build.json --noEmit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yarn lint:eslint &amp;amp;&amp;amp; yarn lint:docs &amp;amp;&amp;amp; yarn lint:ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prebuild"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yarn lint &amp;amp;&amp;amp; yarn jest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&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;"ultra"&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;"concurrent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"lint"&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;ul&gt;
&lt;li&gt;
&lt;code&gt;yarn build&lt;/code&gt; will run the &lt;code&gt;lint&lt;/code&gt; and &lt;code&gt;jest&lt;/code&gt; commands sequentially&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ultra build&lt;/code&gt; will run all &lt;code&gt;lint&lt;/code&gt; commands concurrently and then execute &lt;code&gt;jest&lt;/code&gt;. (note that we can also add &lt;code&gt;prebuild&lt;/code&gt; to &lt;code&gt;concurrent&lt;/code&gt;, since tests don't depend on linting. this way all commnands would run concurrently)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notice how the sum of execution times of the seperate lint commands is lower than the total time:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9pyMxEA_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-lint.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9pyMxEA_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/folke/ultra-runner/master/assets/ultra-lint.png" alt="Ultra Lint"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>npm</category>
      <category>node</category>
      <category>showdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>🤖 🚀 ✨ Emojify your conventional commits with Devmoji </title>
      <dc:creator>Folke Lemaitre</dc:creator>
      <pubDate>Thu, 16 Jan 2020 13:58:06 +0000</pubDate>
      <link>https://dev.to/folke/emojify-your-conventional-commits-with-devmoji-4b3l</link>
      <guid>https://dev.to/folke/emojify-your-conventional-commits-with-devmoji-4b3l</guid>
      <description>&lt;p&gt;Using &lt;a href="https://www.conventionalcommits.org/" rel="noopener noreferrer"&gt;Conventional Commits ⭐&lt;/a&gt; as a standard for your commit messages, makes &lt;a href="https://semver.org/" rel="noopener noreferrer"&gt;Semantic Versioning 🔖&lt;/a&gt; as easy as can be, with tools like &lt;a href="https://github.com/conventional-changelog/conventional-changelog" rel="noopener noreferrer"&gt;Conventional Changelog 📄&lt;/a&gt;,&lt;a href="https://github.com/conventional-changelog/standard-version" rel="noopener noreferrer"&gt;Standard Version 🔖&lt;/a&gt; and &lt;a href="https://github.com/semantic-release/semantic-release" rel="noopener noreferrer"&gt;Semantic Release 📦🚀&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Devmoji&lt;/strong&gt; is a command line tool that adds color 🌈 to conventional&lt;br&gt;
commits, using emojis inspired by&lt;br&gt;
&lt;a href="https://gitmoji.carloscuesta.me/" rel="noopener noreferrer"&gt;Gitmoji 😜&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some of the things &lt;strong&gt;Devmoji&lt;/strong&gt; can do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;emojify:&lt;/strong&gt; convert input between diferent emoji
formats &lt;code&gt;unicode&lt;/code&gt;, &lt;code&gt;shortcode&lt;/code&gt; and &lt;code&gt;devmoji&lt;/code&gt;. &lt;strong&gt;devmoji&lt;/strong&gt; are easy to remember
aliases like: &lt;code&gt;:test:&lt;/code&gt;, &lt;code&gt;:refactor:&lt;/code&gt;, &lt;code&gt;:docs:&lt;/code&gt;, &lt;code&gt;:security&lt;/code&gt; instead of hard to
remember emoji codes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;git commit:&lt;/strong&gt; install a &lt;strong&gt;&lt;code&gt;prepare-commit-msg&lt;/code&gt; commit
hook&lt;/strong&gt; to ✨ automagically emojify your commit message&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;git log:&lt;/strong&gt; emojify and colorify the output of &lt;code&gt;git log&lt;/code&gt;
even for projects not using emojis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What does it look like?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;see the commit messages of the Devmoji
&lt;a href="https://github.com/folke/devmoji" rel="noopener noreferrer"&gt;github repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;generated Devmoji
&lt;a href="https://github.com/folke/devmoji/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt;CHANGELOG.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📦 Installation
&lt;/h2&gt;

&lt;p&gt;Install with &lt;code&gt;npm&lt;/code&gt; or &lt;code&gt;yarn&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;globally&lt;/p&gt;
&lt;/blockquote&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; devmoji
yarn global &lt;span class="nb"&gt;install &lt;/span&gt;devmoji


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;locally inside your project. use with &lt;code&gt;npx devmoji&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--dev&lt;/span&gt; devmoji
yarn add &lt;span class="nt"&gt;--dev&lt;/span&gt; devmoji


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

&lt;/div&gt;

&lt;p&gt;See &lt;code&gt;--edit&lt;/code&gt; for information on how to setup a git commit&lt;br&gt;
hook.&lt;/p&gt;

&lt;h2&gt;
  
  
  💥 Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;devmoji --help&lt;/code&gt;
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;devmoji &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;span class="go"&gt;Usage: devmoji [options]

Options:
&lt;/span&gt;&lt;span class="gp"&gt;  -c|--config &amp;lt;file&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;location of the devmoji.config.js file
&lt;span class="go"&gt;  -l|--list             list all known devmojis
&lt;/span&gt;&lt;span class="gp"&gt;  -t|--text &amp;lt;text&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;text to format. reads from stdin when omitted
&lt;span class="gp"&gt;  -f|--format &amp;lt;format&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;format should be one of: unicode, shortcode, devmoji &lt;span class="o"&gt;(&lt;/span&gt;default: &lt;span class="s2"&gt;"unicode"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="go"&gt;  --commit              automatically add a devmoji to the conventional commit header (default: true)
  --no-commit           do not process conventional commit headers
  -e|--edit             read last commit message from .git/COMMIT_EDITMSG in the git root
  --log                 format conventional commits in text similar to git log
  --color               use colors for formatting. Colors are enabled by default, unless output is piped to another command (default: true)
  --no-color            don't use colors
  --version             output the version number
  -h, --help            output usage information


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  &lt;code&gt;devmoji&lt;/code&gt; emojify
&lt;/h3&gt;

&lt;p&gt;Emojify text using &lt;code&gt;--text&lt;/code&gt; or piping it to &lt;code&gt;stdin&lt;/code&gt;. Input can be a combination&lt;br&gt;
using any valid format. Output formats:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;shortcode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;outputs Github Markdown short codes like &lt;code&gt;:sparkles:&lt;/code&gt; &lt;code&gt;:rocket:&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;unicode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;outputs the emoji unicode symbols like ✨ 🚀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;devmoji&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;outputs the devmoji shortcodes like &lt;code&gt;:feat:&lt;/code&gt; &lt;code&gt;:chore-release:&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;strip&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;removes all emoji from the input&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;The default format is &lt;code&gt;unicode&lt;/code&gt;, since this can be used pretty much everywhere&lt;br&gt;
and has the shortest text length (relevant for commit messages)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"This is a :test: of the first :release: :boom: ✨"&lt;/span&gt; | devmoji &lt;span class="nt"&gt;--format&lt;/span&gt; shortcode
&lt;span class="go"&gt;This is a :rotating_light: of the first :rocket: :boom: :sparkles:

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"This is a :test: of the first :release: :boom: :sparkles:"&lt;/span&gt; | devmoji &lt;span class="nt"&gt;--format&lt;/span&gt; unicode
&lt;span class="go"&gt;This is a 🚨 of the first 🚀 💥 ✨

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"🚀 :boom: :sparkles:"&lt;/span&gt; | devmoji &lt;span class="nt"&gt;--format&lt;/span&gt; devmoji
&lt;span class="go"&gt;:chore-release: :breaking: :feat:

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"test 🚀 :boom: :sparkles: :security:"&lt;/span&gt; | devmoji &lt;span class="nt"&gt;--format&lt;/span&gt; strip
&lt;span class="go"&gt;test


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  &lt;code&gt;devmoji --commit&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Automagically ✨ emojifies a conventional commit message of the format&lt;br&gt;
&lt;code&gt;type(scope): something useful&lt;/code&gt;, using the following pseudo code:&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;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:type-scope:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;emoji&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:type-scope:&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:type:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:scope:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;emoji&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:type:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;emoji&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:scope:&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:type:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;emoji&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:type:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;example ouput:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"feat: added a new feature :smile:"&lt;/span&gt; | devmoji &lt;span class="nt"&gt;--commit&lt;/span&gt;
&lt;span class="go"&gt;feat: ✨ added a new feature 😄

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"chore(release): 1.1.1"&lt;/span&gt; | devmoji &lt;span class="nt"&gt;--commit&lt;/span&gt;
&lt;span class="go"&gt;chore(release): 🚀 1.1.1

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"fix(security): upgraded lodash"&lt;/span&gt; | devmoji &lt;span class="nt"&gt;--commit&lt;/span&gt;
&lt;span class="go"&gt;fix(security): 🐛 🔒 upgraded lodash


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  &lt;code&gt;devmoji --edit&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Formats and saves your current commit message &lt;code&gt;.git/COMMIT_EDITMSG&lt;/code&gt;. This is&lt;br&gt;
only really useful as a &lt;code&gt;prepare-commit-msg&lt;/code&gt; hook.&lt;/p&gt;

&lt;p&gt;Configuration using &lt;a href="https://www.npmjs.com/package/husky" rel="noopener noreferrer"&gt;Husky&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// package.json&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;husky&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hooks&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;prepare-commit-msg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;devmoji -e&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;Configuration using &lt;a href="https://www.npmjs.com/package/yorkie" rel="noopener noreferrer"&gt;Yorkie&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// package.json&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gitHooks&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;prepare-commit-msg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;devmoji -e&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;If you installed &lt;strong&gt;Devmoji&lt;/strong&gt; locally in your project as a dev dependency, then&lt;br&gt;
use something like &lt;code&gt;npx --no-install devmoji -e&lt;/code&gt; instead of the commands&lt;br&gt;
above.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;devmoji --log&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Works similar to &lt;code&gt;--commit&lt;/code&gt;, but formats &lt;code&gt;type(scope): something useful&lt;/code&gt;&lt;br&gt;
anywhere in the input instead of the beginning of the first line.&lt;/p&gt;

&lt;p&gt;This is useful to format the output of &lt;code&gt;git log&lt;/code&gt;. Any &lt;code&gt;git log&lt;/code&gt; option works,&lt;br&gt;
but my favorite alias is:&lt;/p&gt;

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

&lt;span class="nv"&gt;$ &lt;/span&gt;git log &lt;span class="nt"&gt;--graph&lt;/span&gt; &lt;span class="nt"&gt;--pretty&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;format:&lt;span class="s1"&gt;'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)&amp;lt;%an&amp;gt;%Creset'&lt;/span&gt; &lt;span class="nt"&gt;--abbrev-commit&lt;/span&gt; &lt;span class="nt"&gt;--decorate&lt;/span&gt; &lt;span class="nt"&gt;--date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;short


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;I'll use my alias &lt;code&gt;git l&lt;/code&gt;, instead of the above, for clarity. The&lt;br&gt;
&lt;code&gt;devmoji --format strip&lt;/code&gt; is only for demonstration purposes, since all devmoji&lt;br&gt;
commits already have emoji&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ffolke%2Fdevmoji%2Fraw%2Fmaster%2Fassets%2Fgit--log.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ffolke%2Fdevmoji%2Fraw%2Fmaster%2Fassets%2Fgit--log.png" alt="devmoji --list"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;using &lt;code&gt;devmoji --log&lt;/code&gt; &amp;gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ffolke%2Fdevmoji%2Fraw%2Fmaster%2Fassets%2Fdevmoji--log.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ffolke%2Fdevmoji%2Fraw%2Fmaster%2Fassets%2Fdevmoji--log.png" alt="devmoji --list"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;devmoji --list&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;To get a list of all available &lt;strong&gt;Devmiji&lt;/strong&gt;, run with &lt;code&gt;--list&lt;/code&gt;. (see also&lt;br&gt;
Default Devmoji)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ffolke%2Fdevmoji%2Fraw%2Fmaster%2Fassets%2Fdevmoji--list.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ffolke%2Fdevmoji%2Fraw%2Fmaster%2Fassets%2Fdevmoji--list.png" alt="devmoji --list"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ Configuration
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;devmoji&lt;/code&gt; uses the config file as specified with the &lt;code&gt;--config&lt;/code&gt; option, or looks&lt;br&gt;
for &lt;code&gt;devmoji.config.js&lt;/code&gt; in the following paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;current directory&lt;/li&gt;
&lt;li&gt;parent directory that contains a &lt;code&gt;package.json&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;parent directory that is a &lt;code&gt;git&lt;/code&gt; repository&lt;/li&gt;
&lt;li&gt;home directory&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example Config File
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;p&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;defaults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="c1"&gt;// extra types used in commit messages&lt;/span&gt;&lt;br&gt;
  &lt;span class="na"&gt;types&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="s2"&gt;lint&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;br&gt;
  &lt;span class="c1"&gt;// custom devmoji&lt;/span&gt;&lt;br&gt;
  &lt;span class="na"&gt;devmoji&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;br&gt;
    &lt;span class="c1"&gt;// use :boom: instead of :sparkles: for the type 'feat'&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;feat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;emoji&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;boom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&lt;br&gt;
    &lt;span class="c1"&gt;// add a custom devmoji&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fail&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;emoji&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;poop&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;something bad happened&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;&lt;br&gt;
    &lt;span class="c1"&gt;// add a new devmoji based on an existing gitmoji. description will be taken from the gitmoji&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;gitmoji&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;art&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;&lt;br&gt;
    &lt;span class="c1"&gt;// the emoji from the gitmoji can be overriden as well&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;config&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;gitmoji&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wrench&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;emoji&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gear&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;&lt;br&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

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

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Default Devmoji Reference&lt;br&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Emoji&lt;/th&gt;
&lt;th&gt;Devmoji Code&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;✨&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:feat:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;feat:&lt;/strong&gt; a new feature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🐛&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:fix:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;fix:&lt;/strong&gt; a bug fix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📚&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:docs:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;docs:&lt;/strong&gt; documentation only changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🎨&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:style:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;style:&lt;/strong&gt; changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;♻️&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:refactor:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;refactor:&lt;/strong&gt; a code change that neither fixes a bug nor adds a feature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚡&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:perf:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;perf:&lt;/strong&gt; a code change that improves performance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🚨&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:test:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;test:&lt;/strong&gt; adding missing or correcting existing tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔧&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:chore:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;chore:&lt;/strong&gt; changes to the build process or auxiliary tools and libraries such as documentation generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🚀&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:chore-release:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;chore(release):&lt;/strong&gt; code deployment or publishing to external repositories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔗&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:chore-deps:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;chore(deps):&lt;/strong&gt; add or delete dependencies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📦&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:build:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;build:&lt;/strong&gt; changes related to build processes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;👷&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:ci:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;ci:&lt;/strong&gt; updates to the continuous integration system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🚀&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:release:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;code deployment or publishing to external repositories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔒&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:security:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fixing security issues.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🌐&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:i18n:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Internationalization and localization.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💥&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:breaking:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Introducing breaking changes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚙️&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:config:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Changing configuration files.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;➕&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:add:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;add something&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;➖&lt;/td&gt;
&lt;td&gt;&lt;code&gt;:remove:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;remove something&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>git</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
