<?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: Umberto Pepato</title>
    <description>The latest articles on DEV Community by Umberto Pepato (@umbo).</description>
    <link>https://dev.to/umbo</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%2F335665%2Ffaf6f402-72c4-403a-9693-bdcc6b2d151a.jpeg</url>
      <title>DEV Community: Umberto Pepato</title>
      <link>https://dev.to/umbo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/umbo"/>
    <language>en</language>
    <item>
      <title>Velociraptor, an alternative to npm scripts for Deno</title>
      <dc:creator>Umberto Pepato</dc:creator>
      <pubDate>Thu, 14 May 2020 01:42:26 +0000</pubDate>
      <link>https://dev.to/umbo/velociraptor-an-npm-style-script-runner-for-deno-26a</link>
      <guid>https://dev.to/umbo/velociraptor-an-npm-style-script-runner-for-deno-26a</guid>
      <description>&lt;p&gt;I've been playing around with &lt;a href="https://deno.land" rel="noopener noreferrer"&gt;Deno&lt;/a&gt; in the last few months (if you haven't already, try it out, it's awesome) and one of the things that frustrated me the most was that I easily ended up writing &lt;em&gt;endless&lt;/em&gt; &lt;code&gt;deno&lt;/code&gt; cli commands, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;deno run &lt;span class="nt"&gt;--allow-read&lt;/span&gt; &lt;span class="nt"&gt;--allow-write&lt;/span&gt; &lt;span class="nt"&gt;--allow-net&lt;/span&gt; &lt;span class="nt"&gt;--config&lt;/span&gt; tsconfig.json &lt;span class="nt"&gt;--importmap&lt;/span&gt; importmap.json &lt;span class="nt"&gt;--reload&lt;/span&gt; file.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;I mean... I just wrote it and I've already forgotten it 🤦‍♂️&lt;/p&gt;

&lt;p&gt;The instinctive reaction of my webdev-y brain was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Easy. Let's write it down in a package.json script.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yeah, no. There ain't no package.json in the land of Deno.&lt;/p&gt;

&lt;p&gt;So I left aside my acute &lt;code&gt;npm run&lt;/code&gt; nostalgia and started working on an alternative for Deno, and after some weeks of coding here it is:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/jurassiscripts" rel="noopener noreferrer"&gt;
        jurassiscripts
      &lt;/a&gt; / &lt;a href="https://github.com/jurassiscripts/velociraptor" rel="noopener noreferrer"&gt;
        velociraptor
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The npm-style script runner for Deno
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/umbopepato/velociraptor/raw/main/assets/logo.svg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fumbopepato%2Fvelociraptor%2Fraw%2Fmain%2Fassets%2Flogo.svg" width="350"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
  Velociraptor is a script runner for Deno, inspired by npm's package.json scripts. It offers a similar experience but with out-of-the-box support for declarative Deno CLI options, environment variables, concurrency and git hooks.
&lt;/p&gt;
&lt;p&gt;
 &lt;a rel="noopener noreferrer" href="https://github.com/jurassiscripts/velociraptor/actions/workflows/test.yml/badge.svg"&gt;&lt;img alt="CI" src="https://github.com/jurassiscripts/velociraptor/actions/workflows/test.yml/badge.svg"&gt;&lt;/a&gt;
 &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/53df716224ceb5ff57c8a34c73802e7de38c827d8b9791fcb9915094ccc59116/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f756d626f70657061746f2f76656c6f6369726170746f723f6c6f676f3d67697468756226696e636c7564655f70726572656c6561736573"&gt;&lt;img alt="Version" src="https://camo.githubusercontent.com/53df716224ceb5ff57c8a34c73802e7de38c827d8b9791fcb9915094ccc59116/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f756d626f70657061746f2f76656c6f6369726170746f723f6c6f676f3d67697468756226696e636c7564655f70726572656c6561736573"&gt;&lt;/a&gt;
 &lt;a href="https://github.com/umbopepato/velociraptor" rel="noopener noreferrer"&gt;&lt;img alt="GitHub stars" src="https://camo.githubusercontent.com/a2c89bdbf9d62d19e52717080bdee403c37e9b1d2e32cd802f83fc11f0da3012/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f756d626f70657061746f2f76656c6f6369726170746f723f6c6f676f3d676974687562"&gt;&lt;/a&gt;
 &lt;a href="https://github.com/jurassiscripts/velociraptor#badge" rel="noopener noreferrer"&gt;&lt;img alt="vr scripts" src="https://camo.githubusercontent.com/32cb97f2c3c9e05a877657a26f57930af47e89cb142feadf29f2e867f84325bf/68747470733a2f2f6261646765732e76656c6f6369726170746f722e72756e2f666c61742e737667"&gt;&lt;/a&gt;
 &lt;a href="https://doc.deno.land/https/deno.land/x/velociraptor@1.5.0/src/scripts_config.ts#ScriptsConfiguration" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/782c0905006f6602356d3228000fe5c453e2e3af5d0046ad6a6c68e7f5a3dfa2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656e6f2d646f632d626c75653f6c6f676f3d64656e6f"&gt;&lt;/a&gt;
 &lt;a href="https://deno.land" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/032277059d2b041d7229d66989f539f10640a20425b75a7224c228a3500e660e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656e6f2d253545312e302e302d677265656e3f6c6f676f3d64656e6f"&gt;&lt;/a&gt;
 &lt;a href="https://discord.gg/M5K7TBd" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2ec541f8260d860a0c098b02c7a85d67da848c3c1d4bbba0de8b666f95c680ae/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6a6f696e2d636861742d3732383944413f6c6f676f3d646973636f7264266c6f676f436f6c6f723d7768697465"&gt;&lt;/a&gt;
 &lt;a href="https://github.com/jurassiscripts/velociraptor/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/88e1dabf4d223df0950e0985948e231325fefca9fa7fe9e446cf8b1c5e9d9e47/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Documentation&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;To get started visit &lt;a href="https://velociraptor.run" rel="nofollow noopener noreferrer"&gt;velociraptor.run&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Help&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;If you need any help feel free to ask in &lt;a href="https://github.com/jurassiscripts/velociraptor/discussions" rel="noopener noreferrer"&gt;discussions&lt;/a&gt; or in the &lt;a href="https://discord.gg/M5K7TBd" rel="nofollow noopener noreferrer"&gt;chat&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Badge&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Show your collaborators/users you use velociraptor:&lt;/p&gt;

&lt;div class="highlight highlight-text-md notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-s"&gt;[&lt;/span&gt;&lt;span class="pl-s"&gt;![&lt;/span&gt;vr scripts&lt;span class="pl-s"&gt;]&lt;/span&gt;&lt;span class="pl-s"&gt;(&lt;/span&gt;&lt;span class="pl-corl"&gt;https://badges.velociraptor.run/flat.svg&lt;/span&gt;&lt;span class="pl-s"&gt;)]&lt;/span&gt;&lt;span class="pl-s"&gt;(&lt;/span&gt;&lt;span class="pl-corl"&gt;https://velociraptor.run&lt;/span&gt;&lt;span class="pl-s"&gt;)&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://velociraptor.run" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/32cb97f2c3c9e05a877657a26f57930af47e89cb142feadf29f2e867f84325bf/68747470733a2f2f6261646765732e76656c6f6369726170746f722e72756e2f666c61742e737667" alt="vr scripts"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contributing&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Feedback and PRs are welcome! Take a look at the &lt;a href="https://github.com/jurassiscripts/velociraptor/CONTRIBUTING.md" rel="noopener noreferrer"&gt;contributing guidelines&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;License&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;This project is licensed under the MIT License. See &lt;a href="https://github.com/jurassiscripts/velociraptor/LICENSE" rel="noopener noreferrer"&gt;LICENSE&lt;/a&gt; for details.&lt;/p&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/jurassiscripts/velociraptor" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;To get started, install it with &lt;code&gt;deno install&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;deno &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-qA&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; vr https://deno.land/x/velociraptor/cli.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then create a file called &lt;code&gt;scripts.yaml&lt;/code&gt; (&lt;code&gt;.json&lt;/code&gt; and &lt;code&gt;.ts&lt;/code&gt; are supported as well) in your project folder&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;scripts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deno run my-script-file.ts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and run the &lt;code&gt;start&lt;/code&gt; command&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;vr start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this form script files are essentially a remake of the &lt;code&gt;scripts&lt;/code&gt; section of &lt;code&gt;package.json&lt;/code&gt;: keys are script names, values are arbitrary shell scripts. But there's more.&lt;/p&gt;

&lt;h3&gt;
  
  
  More script options
&lt;/h3&gt;

&lt;p&gt;Use objects to superpower your scripts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;scripts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deno run server.ts&lt;/span&gt;
    &lt;span class="na"&gt;desc&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Starts the server&lt;/span&gt; &lt;span class="c1"&gt;# This description is shown in the list&lt;/span&gt;
                            &lt;span class="c1"&gt;# of available scripts when running vr&lt;/span&gt;
                            &lt;span class="c1"&gt;# without arguments&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Compact deno run
&lt;/h3&gt;

&lt;p&gt;When a script starts with a &lt;code&gt;.ts&lt;/code&gt; or &lt;code&gt;.js&lt;/code&gt; file, &lt;code&gt;deno run&lt;/code&gt; is automatically prepended:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;scripts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;server.ts&lt;/span&gt; &lt;span class="c1"&gt;# Equivalent to deno run server.ts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Env variables
&lt;/h3&gt;

&lt;p&gt;Use &lt;code&gt;env&lt;/code&gt; to pass env variables to the scripts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# Sent to all the scripts&lt;/span&gt;
  &lt;span class="na"&gt;PORT&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
&lt;span class="na"&gt;scripts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;start-dev&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;server.ts&lt;/span&gt;
    &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# script-specific override&lt;/span&gt;
      &lt;span class="na"&gt;PORT&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
  &lt;span class="na"&gt;start-prod&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deno run server.ts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Deno cli options
&lt;/h3&gt;

&lt;p&gt;A subset of &lt;code&gt;deno&lt;/code&gt; cli options can be passed to the scripts (to name a few: &lt;code&gt;--allow-*&lt;/code&gt; permissions, tsconfig.json, import maps, lock files...)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;scripts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;server.ts&lt;/span&gt;
    &lt;span class="na"&gt;allow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;net&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
    &lt;span class="na"&gt;tsconfig&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tsconfig.json&lt;/span&gt;
    &lt;span class="na"&gt;imap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;importmap.json&lt;/span&gt;

&lt;span class="na"&gt;allow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# Global options&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Compound scripts
&lt;/h3&gt;

&lt;p&gt;A list of commands is executed in series&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;scripts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;deno run one.ts&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;deno run two.ts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and parallel commands are supported as well&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;scripts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pll&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;deno run one.ts&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;deno run two.ts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bonus
&lt;/h3&gt;

&lt;p&gt;Support for husky-style git hooks is coming soon! 🐶&lt;/p&gt;

&lt;p&gt;Check out the documentation in the &lt;a href="https://github.com/umbopepato/velociraptor" rel="noopener noreferrer"&gt;repo&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;Hope you'll find it useful! 🙌&lt;/p&gt;

</description>
      <category>deno</category>
      <category>packagejson</category>
      <category>npm</category>
      <category>scripts</category>
    </item>
  </channel>
</rss>
