summaryrefslogtreecommitdiff
path: root/docs/getting_started/command_line_interface.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/getting_started/command_line_interface.md')
-rw-r--r--docs/getting_started/command_line_interface.md124
1 files changed, 124 insertions, 0 deletions
diff --git a/docs/getting_started/command_line_interface.md b/docs/getting_started/command_line_interface.md
new file mode 100644
index 000000000..e8538cd3f
--- /dev/null
+++ b/docs/getting_started/command_line_interface.md
@@ -0,0 +1,124 @@
+## Command line interface
+
+Deno is a command line program. You should be familiar with some simple commands
+having followed the examples thus far and already understand the basics of shell
+usage.
+
+There are multiple ways of viewing the main help text:
+
+```shell
+# Using the subcommand.
+deno help
+
+# Using the short flag -- outputs the same as above.
+deno -h
+
+# Using the long flag -- outputs more detailed help text where available.
+deno --help
+```
+
+Deno's CLI is subcommand-based. The above commands should show you a list of
+those supported, such as `deno bundle`. To see subcommand-specific help for
+`bundle`, you can similarly run one of:
+
+```shell
+deno help bundle
+deno bundle -h
+deno bundle --help
+```
+
+Detailed guides to each subcommand can be found [here](../tools.md).
+
+### Script arguments
+
+Separately from the Deno runtime flags, you can pass user-space arguments to the
+script you are running by specifying them after the script name:
+
+```shell
+deno run main.ts a b -c --quiet
+```
+
+```ts
+// main.ts
+console.log(Deno.args); // [ "a", "b", "-c", "--quiet" ]
+```
+
+**Note that anything passed after the script name will be passed as a script
+argument and not consumed as a Deno runtime flag.** This leads to the following
+pitfall:
+
+```shell
+# Good. We grant net permission to net_client.ts.
+deno run --allow-net net_client.ts
+
+# Bad! --allow-net was passed to Deno.args, throws a net permission error.
+deno run net_client.ts --allow-net
+```
+
+Some see it as unconventional that:
+
+> a non-positional flag is parsed differently depending on its position.
+
+However:
+
+1. This is the most logical way of distinguishing between runtime flags and
+ script arguments.
+2. This is the most ergonomic way of distinguishing between runtime flags and
+ script arguments.
+3. This is, in fact, the same behaviour as that of any other popular runtime.
+ - Try `node -c index.js` and `node index.js -c`. The first will only do a
+ syntax check on `index.js` as per Node's `-c` flag. The second will
+ _execute_ `index.js` with `-c` passed to `require("process").argv`.
+
+---
+
+There exist logical groups of flags that are shared between related subcommands.
+We discuss these below.
+
+### Integrity flags
+
+Affect commands which can download resources to the cache: `deno cache`,
+`deno run` and `deno test`.
+
+```
+--lock <FILE> Check the specified lock file
+--lock-write Write lock file. Use with --lock.
+```
+
+Find out more about these
+[here](../linking_to_external_code/integrity_checking.md).
+
+### Cache and compilation flags
+
+Affect commands which can populate the cache: `deno cache`, `deno run` and
+`deno test`. As well as the flags above this includes those which affect module
+resolution, compilation configuration etc.
+
+```
+--config <FILE> Load tsconfig.json configuration file
+--importmap <FILE> UNSTABLE: Load import map file
+--no-remote Do not resolve remote modules
+--reload=<CACHE_BLACKLIST> Reload source code cache (recompile TypeScript)
+--unstable Enable unstable APIs
+```
+
+### Runtime flags
+
+Affect commands which execute user code: `deno run` and `deno test`. These
+include all of the above as well as the following.
+
+#### Permission flags
+
+These are listed [here](./permissions.md#permissions-list).
+
+#### Other runtime flags
+
+More flags which affect the execution environment.
+
+```
+--cached-only Require that remote dependencies are already cached
+--inspect=<HOST:PORT> activate inspector on host:port ...
+--inspect-brk=<HOST:PORT> activate inspector on host:port and break at ...
+--seed <NUMBER> Seed Math.random()
+--v8-flags=<v8-flags> Set V8 command line options. For help: ...
+```