mndeveciM
Denoβ€’3y agoβ€’
2 replies
mndeveci

Bundling a CLI written in JS with Deno

Hi team,

Thanks for writing this excellent blog-post (and video) about rolling your own JS runtime with your application using
deno_core
crate. I am trying to wrap a CLI tool with that approach, however I am hitting different walls when I try to get things working.

First of all, I can run this CLI by using Deno runtime directly. I can run
deno run npm:{package-name}
and it just works.
However when I try to use your approach from the blogpost, I am hitting different walls;
- If I provide
npm:{package-name}
in my JS file directly, it says it can't resolve the
npm:
links (I suppose I need to add more resolvers, but I couldn't find one from the crate documentation.)
- If I install all dependencies in a local folder directly, and if I try to run this again, I am getting errors when a particular JS file tries to reference others from
node_modules
folder (
Error: Relative import path "..." not prefixed with / or ./ or ../ from
)
- If I use
esbuild
to bundle everything into single JS file, it passes all of the first issues, however I am now hitting problems with core modules like
fs
or
url
since esbuild imports them with
require("url")
, which I believe not compatible with Deno. If I update those imports with the ones that you provided with following import statement
import * as uri from "https://deno.land/std@0.173.0/node/url.ts";
I am getting following error:
Error: Provided module specifier "https://deno.land/std@0.173.0/node/url.ts" is not a file URL.


Can you help me what will be the best approach here and how can I resolve my problems above?

Appreciate for your responses πŸ™
Deno Blog
We'll implement
fetch
, read command line arguments, and add native support for TypeScript and TSX.
Roll your own JavaScript runtime, pt. 2
Was this page helpful?