Hola mundo al estilo Deno
Es habitual, cuando se aprende un lenguaje de programación, escribir una pequeña aplicación mostrando el mensaje “¡Hola mundo!”. En el caso de Deno, vamos a hacer algo un poco diferente para ejecutar tu primer programa con esta tecnología. Ya te conté aquí que Deno ofrece un servicio de repositorios a través de https://deno.land/x/, y vamos a usar un programa ejemplo que tienen publicado con el nombre de welcome. ¡Para que Deno lo descarge, lo compile y lo ejecute, sólo necesitamos escribir una línea!:
$ deno run https://deno.land/std@0.87.0/examples/welcome.ts
Download https://deno.land/std@0.87.0/examples/welcome.ts
Compile https://deno.land/std@0.87.0/examples/welcome.ts
Welcome to Deno!
Por supuesto que ejecutar código de manera arbitraria desde cualquier URL de internet no es una práctica recomendable, pero no olvides que con Deno disponemos de un entorno aislado del resto del sistema operativo donde es posible ajustar distintos tipos de permisos para los ejecutables, es decir, Deno dispone de un sandbox integrado.
El programa que hemos ejecutado es realmente sencillo, tan solo una llamada a console.log().
console.log('Welcome to Deno 🦕')
Si abres en el navegador la URL que hemos utilizado no verás el código fuente, porque la web de Deno reconoce tu navegador y sirve dicho código de un modo más amable para nosotros. Puedes descargarlo con, por ejemplo wget, que solita la versión text/plain en lugar de la versión text/html.
$ wget https://deno.land/std@0.87.0/examples/welcome.ts
--2021-02-13 23:36:09-- https://deno.land/std@0.87.0/examples/welcome.ts
Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt'
Resolving deno.land (deno.land)... 104.21.18.123, 172.67.181.211, 2606:4700:3031::ac43:b5d3, ...
Connecting to deno.land (deno.land)|104.21.18.123|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 33 [application/typescript]
Saving to: ‘welcome.ts’
welcome.ts 100%[===============================>] 33 --.-KB/s in 0s
2021-02-13 23:36:10 (34.3 MB/s) - ‘welcome.ts’ saved [33/33]
Si volvieras a ejecutar el programa, como es algo que ya hiciste anteriormente, y Deno cacheó dicho programa, verás que en esta ocasión no lo descargará.
$ deno run https://deno.land/std@0.87.0/examples/welcome.ts
Welcome to Deno!
En todo caso, si quieres que lo vuelva a descargar para asegurarte de que ejecuta la última versión publicada, podrías usar la opción –reload o -r.
$ deno run --reload https://deno.land/std@0.87.0/examples/welcome.ts
Download https://deno.land/std@0.87.0/examples/welcome.ts
Compile https://deno.land/std@0.87.0/examples/welcome.ts
Welcome to Deno!
Deno run tiene, además de esta, muchísimas opciones más. Para conocerlas ejecutar el comando deno run –help.
$ deno run --help
deno-run
Run a program given a filename or url to the module.
By default all programs are run in sandbox without access to disk, network or
ability to spawn subprocesses.
deno run https://deno.land/std/examples/welcome.ts
Grant all permissions:
deno run -A https://deno.land/std/http/file_server.ts
Grant permission to read from disk and listen to network:
deno run --allow-read --allow-net https://deno.land/std/http/file_server.ts
Grant permission to read whitelisted files from disk:
deno run --allow-read=/etc https://deno.land/std/http/file_server.ts
USAGE:
deno run [OPTIONS] <SCRIPT_ARG>...
OPTIONS:
-A, --allow-all
Allow all permissions
--allow-env
Allow environment access
--allow-hrtime
Allow high resolution time measurement
--allow-net=<allow-net>
Allow network access
--allow-plugin
Allow loading plugins
--allow-read=<allow-read>
Allow file system read access
--allow-run
Allow running subprocesses
--allow-write=<allow-write>
Allow file system write access
--cached-only
Require that remote dependencies are already cached
--cert <FILE>
Load certificate authority from PEM encoded file
-c, --config <FILE>
Load tsconfig.json configuration file
-h, --help
Prints help information
--importmap <FILE>
UNSTABLE:
Load import map file
Docs: https://deno.land/std/manual.md#import-maps
Specification: https://wicg.github.io/import-maps/
Examples: https://github.com/WICG/import-maps#the-import-map
--inspect=<HOST:PORT>
activate inspector on host:port (default: 127.0.0.1:9229)
--inspect-brk=<HOST:PORT>
activate inspector on host:port and break at start of user script
--lock <FILE>
Check the specified lock file
--lock-write
Write lock file. Use with --lock.
-L, --log-level <log-level>
Set log level [possible values: debug, info]
--no-remote
Do not resolve remote modules
-q, --quiet
Suppress diagnostic output
By default, subcommands print human-readable diagnostic messages to stderr.
If the flag is set, restrict these messages to errors.
-r, --reload=<CACHE_BLACKLIST>
Reload source code cache (recompile TypeScript)
--reload
Reload everything
--reload=https://deno.land/std
Reload only standard modules
--reload=https://deno.land/std/fs/utils.ts,https://deno.land/std/fmt/colors.ts
Reloads specific modules
--seed <NUMBER>
Seed Math.random()
--unstable
Enable unstable APIs
--v8-flags=<v8-flags>
Set V8 command line options. For help: --v8-flags=--help
ARGS:
<SCRIPT_ARG>...
script args