1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-28 16:20:57 -05:00

feat: upgrade installer and add docs (#2551)

This commit is contained in:
Bartek Iwańczuk 2019-06-20 20:25:13 +02:00 committed by Ryan Dahl
parent f2c50fae84
commit 77a00aef4c
2 changed files with 137 additions and 3 deletions

View file

@ -350,7 +350,21 @@ Demonstrates breaking the input up by space delimiter instead of by lines:
.long_about( .long_about(
"Automatically downloads deno_installer dependencies on first run. "Automatically downloads deno_installer dependencies on first run.
deno install file_server https://deno.land/std/http/file_server.ts --allow-net --allow-read", Default installation directory is $HOME/.deno/bin and it must be added to the path manually.
deno install file_server https://deno.land/std/http/file_server.ts --allow-net --allow-read
deno install colors https://deno.land/std/examples/colors.ts
To change installation directory use -d/--dir flag
deno install -d /usr/local/bin file_server https://deno.land/std/http/file_server.ts --allow-net --allow-read",
).arg(
Arg::with_name("dir")
.long("dir")
.short("d")
.help("Installation directory (defaults to $HOME/.deno/bin)")
.takes_value(true)
).arg( ).arg(
Arg::with_name("exe_name") Arg::with_name("exe_name")
.help("Executable name") .help("Executable name")
@ -509,7 +523,7 @@ fn parse_run_args(mut flags: DenoFlags, matches: &ArgMatches) -> DenoFlags {
/// Used for `deno fmt <files>...` subcommand /// Used for `deno fmt <files>...` subcommand
const PRETTIER_URL: &str = "https://deno.land/std@v0.7.0/prettier/main.ts"; const PRETTIER_URL: &str = "https://deno.land/std@v0.7.0/prettier/main.ts";
/// Used for `deno install...` subcommand /// Used for `deno install...` subcommand
const INSTALLER_URL: &str = "https://deno.land/std@1679ba/installer/mod.ts"; const INSTALLER_URL: &str = "https://deno.land/std@b13441f/installer/mod.ts";
/// These are currently handled subcommands. /// These are currently handled subcommands.
/// There is no "Help" subcommand because it's handled by `clap::App` itself. /// There is no "Help" subcommand because it's handled by `clap::App` itself.
@ -617,10 +631,18 @@ pub fn flags_from_vec(
flags.allow_run = true; flags.allow_run = true;
argv.push(INSTALLER_URL.to_string()); argv.push(INSTALLER_URL.to_string());
if install_match.is_present("dir") {
let install_dir = install_match.value_of("dir").unwrap();
argv.push("--dir".to_string());
argv.push(install_dir.to_string());
}
let exe_name: &str = install_match.value_of("exe_name").unwrap(); let exe_name: &str = install_match.value_of("exe_name").unwrap();
argv.push(exe_name.to_string());
match install_match.subcommand() { match install_match.subcommand() {
(script_url, Some(script_match)) => { (script_url, Some(script_match)) => {
argv.extend(vec![exe_name.to_string(), script_url.to_string()]); argv.push(script_url.to_string());
if script_match.is_present("") { if script_match.is_present("") {
let flags: Vec<String> = script_match let flags: Vec<String> = script_match
.values_of("") .values_of("")
@ -1322,5 +1344,41 @@ mod tests {
"--allow-read" "--allow-read"
] ]
); );
let (flags, subcommand, argv) = flags_from_vec(svec![
"deno",
"install",
"-d",
"/usr/local/bin",
"file_server",
"https://deno.land/std/http/file_server.ts",
"--allow-net",
"--allow-read"
]);
assert_eq!(
flags,
DenoFlags {
allow_write: true,
allow_net: true,
allow_read: true,
allow_env: true,
allow_run: true,
..DenoFlags::default()
}
);
assert_eq!(subcommand, DenoSubcommand::Install);
assert_eq!(
argv,
svec![
"deno",
INSTALLER_URL,
"--dir",
"/usr/local/bin",
"file_server",
"https://deno.land/std/http/file_server.ts",
"--allow-net",
"--allow-read"
]
);
} }
} }

View file

@ -698,6 +698,82 @@ export main() {
} }
``` ```
### Installing executable scripts
Deno provides ability to easily install and distribute executable code via
`deno install` command.
`deno install [EXE_NAME] [URL] [FLAGS...]` will install script available at
`URL` with name `EXE_NAME`.
This command is a thin wrapper that creates executable shell scripts which
invoke `deno` with specified permissions and CLI flags.
Example:
```
$ deno install file_server https://deno.land/std/http/file_server.ts --allow-net --allow-read
[1/1] Compiling https://deno.land/std/http/file_server.ts
✅ Successfully installed file_server.
/Users/deno/.deno/bin/file_server
```
By default scripts are installed at `$HOME/.deno/bin` and that directory must be
added to the path manually.
```
$ echo 'export PATH="$HOME/.deno/bin:$PATH"' >> ~/.bashrc
```
Installation directory can be changed using `-d/--dir` flag:
```
deno install --dir /usr/local/bin prettier https://deno.land/std/prettier/main.ts --allow-write --allow-read
```
When installing a script you can specify permissions that will be used to run
the script. They are placed after the script URL and can be mixed with any
additional CLI flags you want to pass to the script.
Example:
```
deno install format_check https://deno.land/std/prettier/main.ts --allow-write --allow-read --check --print-width 88 --tab-width 2
```
Above command creates an executable called `format_check` that runs `prettier`
with write and read permissions. When you run `format_check` deno will run
prettier in `check` mode and configured to use `88` column width with `2` column
tabs.
It is a good practice to use `import.meta.main` idiom for an entry point for
executable file. See
[Testing if current file is the main program](#testing-if-current-file-is-the-main-program)
section.
Example:
```ts
// https://example.com/awesome/cli.ts
async function myAwesomeCli(): Promise<void> {
-- snip --
}
if (import.meta.main) {
myAwesomeCli();
}
```
When you create executable script make sure to let users know by adding example
installation command to your repository:
```
# Install using deno install
$ deno install awesome_cli https://example.com/awesome/cli.ts
```
## Import maps ## Import maps
Deno supports [import maps](https://github.com/WICG/import-maps). Deno supports [import maps](https://github.com/WICG/import-maps).