I can understand the frustration because the whole point of the article and the discussions here is that using the scripts functionality of NPM is equivalent to using a task runner, and, according to some here (including myself) superior in most cases.<p>But you&#x27;re right that it&#x27;s maybe not immediately obvious unless you&#x27;ve already played around with the scripts functionality and task runners in general. And I suppose you do need to have a basic familiarity with the concept of piping data from one unix command to another, running commands in sequence or parallel, the difference between &quot;&amp;&quot;, &quot;&amp;&amp;&quot;, &quot;;&quot;, and &quot;|&quot; etc. Not to mention the difference between STDERR and STDOUT which I still don&#x27;t fully master. Thankfully this has almost never been an issue in practice.<p>That said, I strongly suggest you take this opportunity to continue diving into this issue and maybe trying out both approaches yourself. My own experience getting into the node ecosystem and back-end stuff has been that I wasted countless hours on figuring out task runners, solving weird bugs and issues, switching from grunt to gulp, where I could have avoided all that by learning how to use the npm scripts functionality instead.<p>As a bonus, becoming more familiar with *nix approach to stringing together commands has been incredibly useful for many other things! For example, I&#x27;ve been able to replace certain scripts (backups, ftp synchronization, data conversion) with much simpler solutions that rely on this OS-wide functionality.