2018-05-18 12:25:59 -04:00
|
|
|
# deno
|
|
|
|
|
2018-10-04 05:01:21 -04:00
|
|
|
| **Linux & Mac** | **Windows** |
|
|
|
|
| :------------------------: | :------------------------: |
|
2018-10-04 03:58:28 -04:00
|
|
|
| [![][tci badge]][tci link] | [![][avy badge]][avy link] |
|
2018-08-02 13:27:57 -04:00
|
|
|
|
2018-06-08 04:38:47 -04:00
|
|
|
## A secure TypeScript runtime built on V8
|
2018-05-28 23:52:22 -04:00
|
|
|
|
2018-10-04 05:01:21 -04:00
|
|
|
- Supports TypeScript 3.0 out of the box. Uses V8 7.0. That is, it's very modern
|
|
|
|
JavaScript.
|
2018-05-28 23:52:22 -04:00
|
|
|
|
2018-10-04 05:01:21 -04:00
|
|
|
- No `package.json`. No npm. Not explicitly compatible with Node.
|
2018-05-28 23:52:22 -04:00
|
|
|
|
2018-10-04 05:01:21 -04:00
|
|
|
- Imports reference source code URLs only.
|
2018-10-05 13:35:03 -04:00
|
|
|
|
|
|
|
```typescript
|
|
|
|
import { test } from "https://unpkg.com/deno_testing@0.0.5/testing.ts";
|
|
|
|
import { log } from "./util.ts";
|
|
|
|
```
|
|
|
|
|
2018-05-30 11:11:15 -04:00
|
|
|
Remote code is fetched and cached on first execution, and never updated until
|
2018-06-08 04:38:47 -04:00
|
|
|
the code is run with the `--reload` flag. (So, this will still work on an
|
2018-05-30 11:11:15 -04:00
|
|
|
airplane. See `~/.deno/src` for details on the cache.)
|
2018-05-28 23:52:22 -04:00
|
|
|
|
2018-10-04 05:01:21 -04:00
|
|
|
- File system and network access can be controlled in order to run sandboxed
|
|
|
|
code. Defaults to read-only file system access and no network access. Access
|
|
|
|
between V8 (unprivileged) and Rust (privileged) is only done via serialized
|
|
|
|
messages defined in this
|
|
|
|
[flatbuffer](https://github.com/denoland/deno/blob/master/src/msg.fbs). This
|
|
|
|
makes it easy to audit. To enable write access explicitly use `--allow-write`
|
|
|
|
and `--allow-net` for network access.
|
|
|
|
|
|
|
|
- Single executable:
|
2018-05-28 23:52:22 -04:00
|
|
|
|
2018-10-04 03:58:28 -04:00
|
|
|
```
|
2018-08-02 13:27:57 -04:00
|
|
|
> ls -lh out/release/deno
|
|
|
|
-rwxr-xr-x 1 rld staff 48M Aug 2 13:24 out/release/deno
|
|
|
|
> otool -L out/release/deno
|
|
|
|
out/release/deno:
|
|
|
|
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.50.4)
|
|
|
|
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
|
|
|
|
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 58286.51.6)
|
|
|
|
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)
|
|
|
|
>
|
2018-10-04 03:58:28 -04:00
|
|
|
```
|
2018-05-28 23:52:22 -04:00
|
|
|
|
2018-10-04 05:01:21 -04:00
|
|
|
- Always dies on uncaught errors.
|
2018-05-29 03:20:04 -04:00
|
|
|
|
2018-10-04 05:01:21 -04:00
|
|
|
- [Aims to support top-level `await`.](https://github.com/denoland/deno/issues/471)
|
2018-05-29 03:20:04 -04:00
|
|
|
|
2018-10-04 05:01:21 -04:00
|
|
|
- Aims to be browser compatible.
|
2018-05-29 03:20:04 -04:00
|
|
|
|
2018-08-31 20:55:04 -04:00
|
|
|
## Install
|
|
|
|
|
2018-09-22 08:43:44 -04:00
|
|
|
**With Python:**
|
|
|
|
|
2018-08-31 20:55:04 -04:00
|
|
|
```
|
2018-09-05 23:45:55 -04:00
|
|
|
curl -sSf https://raw.githubusercontent.com/denoland/deno_install/master/install.py | python
|
2018-08-31 20:55:04 -04:00
|
|
|
```
|
|
|
|
|
2018-09-22 08:43:44 -04:00
|
|
|
**With PowerShell:**
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
iex (iwr https://raw.githubusercontent.com/denoland/deno_install/master/install.ps1)
|
|
|
|
```
|
|
|
|
|
2018-10-04 05:01:21 -04:00
|
|
|
_Note: Depending on your security settings, you may have to run
|
|
|
|
`Set-ExecutionPolicy RemoteSigned -Scope CurrentUser` first to allow downloaded
|
|
|
|
scripts to be executed._
|
2018-09-22 08:43:44 -04:00
|
|
|
|
|
|
|
Try it:
|
2018-10-04 05:01:21 -04:00
|
|
|
|
2018-09-22 08:43:44 -04:00
|
|
|
```
|
|
|
|
> deno http://deno.land/thumb.ts
|
|
|
|
```
|
|
|
|
|
|
|
|
See also [deno_install](https://github.com/denoland/deno_install).
|
|
|
|
|
2018-05-29 03:20:04 -04:00
|
|
|
## Status
|
|
|
|
|
2018-08-02 13:27:57 -04:00
|
|
|
Under development.
|
2018-05-28 23:52:22 -04:00
|
|
|
|
2018-08-23 11:34:09 -04:00
|
|
|
We make binary releases [here](https://github.com/denoland/deno/releases).
|
2018-05-28 23:52:22 -04:00
|
|
|
|
2018-08-23 11:34:09 -04:00
|
|
|
Progress towards future releases is tracked
|
|
|
|
[here](https://github.com/denoland/deno/milestones).
|
2018-08-02 13:27:57 -04:00
|
|
|
|
2018-10-04 05:01:21 -04:00
|
|
|
Roadmap is [here](https://github.com/denoland/deno/blob/master/Roadmap.md). Also
|
|
|
|
see [this presentation](http://tinyclouds.org/jsconf2018.pdf).
|
2018-06-04 03:10:54 -04:00
|
|
|
|
2018-09-26 20:41:23 -04:00
|
|
|
[Benchmarks](https://denoland.github.io/deno/)
|
|
|
|
|
2018-08-02 23:39:58 -04:00
|
|
|
[Chat room](https://gitter.im/denolife/Lobby).
|
|
|
|
|
2018-07-13 03:24:07 -04:00
|
|
|
## Build instructions
|
2018-06-22 19:19:58 -04:00
|
|
|
|
2018-08-29 03:03:56 -04:00
|
|
|
To ensure reproducible builds, Deno has most of its dependencies in a git
|
2018-08-19 15:25:09 -04:00
|
|
|
submodule. However, you need to install separately:
|
2018-05-28 23:52:22 -04:00
|
|
|
|
2018-08-19 15:25:09 -04:00
|
|
|
1. [Rust](https://www.rust-lang.org/en-US/install.html)
|
|
|
|
2. [Node](http://nodejs.org/)
|
2018-10-04 05:01:21 -04:00
|
|
|
3. Python 2.
|
|
|
|
[Not 3](https://github.com/denoland/deno/issues/464#issuecomment-411795578).
|
|
|
|
4. [ccache](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/ccache)
|
|
|
|
(Optional but helpful for speeding up rebuilds of V8.).
|
2018-09-27 17:42:14 -04:00
|
|
|
5. Extra steps for Windows users:
|
|
|
|
1. Add `python.exe` to `PATH`. E.g. `set PATH=%PATH%;C:\Python27\python.exe`
|
2018-10-04 05:01:21 -04:00
|
|
|
2. Get [VS Community 2017](https://www.visualstudio.com/downloads/), make
|
|
|
|
sure to select the option to install C++ tools and the Windows SDK
|
|
|
|
3. Enable `Debugging Tools for Windows`, Goto Control Panel -> Windows 10 SDK
|
|
|
|
-> Right-Click -> Change -> Change -> Check Debugging Tools for Windows ->
|
|
|
|
Change -> Finish
|
2018-09-27 17:42:14 -04:00
|
|
|
|
|
|
|
#### To build:
|
2018-05-31 00:07:02 -04:00
|
|
|
|
2018-07-13 03:24:07 -04:00
|
|
|
# Fetch deps.
|
2018-08-02 19:13:02 -04:00
|
|
|
git clone --recurse-submodules https://github.com/denoland/deno.git
|
2018-07-13 03:24:07 -04:00
|
|
|
cd deno
|
2018-07-26 20:15:55 -04:00
|
|
|
./tools/setup.py
|
2018-05-31 14:31:37 -04:00
|
|
|
|
2018-07-26 20:15:55 -04:00
|
|
|
# Build.
|
2018-07-24 13:42:23 -04:00
|
|
|
./tools/build.py
|
|
|
|
|
2018-09-04 18:57:17 -04:00
|
|
|
# Run.
|
2018-07-24 13:42:23 -04:00
|
|
|
./out/debug/deno tests/002_hello.ts
|
2018-05-28 23:52:22 -04:00
|
|
|
|
2018-09-04 18:57:17 -04:00
|
|
|
# Test.
|
|
|
|
./tools/test.py
|
|
|
|
|
|
|
|
# Format code.
|
|
|
|
./tools/format.py
|
|
|
|
|
2018-09-30 17:30:12 -04:00
|
|
|
Before running `./tools/format.py`, make sure you have `yapf` installed for the
|
|
|
|
current Python and `rustfmt` for Rust. They can be installed by:
|
|
|
|
|
|
|
|
pip install yapf
|
|
|
|
rustup component add rustfmt-preview
|
|
|
|
|
2018-06-22 08:23:42 -04:00
|
|
|
Other useful commands:
|
2018-05-28 23:52:22 -04:00
|
|
|
|
2018-07-24 13:42:23 -04:00
|
|
|
# Call ninja manually.
|
2018-08-17 18:23:14 -04:00
|
|
|
./third_party/depot_tools/ninja -C out/debug
|
2018-07-24 13:42:23 -04:00
|
|
|
# Build a release binary.
|
2018-07-26 20:15:55 -04:00
|
|
|
DENO_BUILD_MODE=release ./tools/build.py :deno
|
2018-07-24 13:42:23 -04:00
|
|
|
# List executable targets.
|
|
|
|
./third_party/depot_tools/gn ls out/debug //:* --as=output --type=executable
|
|
|
|
# List build configuation.
|
|
|
|
./third_party/depot_tools/gn args out/debug/ --list
|
|
|
|
# Edit build configuration.
|
|
|
|
./third_party/depot_tools/gn args out/debug/
|
|
|
|
# Describe a target.
|
|
|
|
./third_party/depot_tools/gn desc out/debug/ :deno
|
2018-07-13 03:24:07 -04:00
|
|
|
./third_party/depot_tools/gn help
|
2018-07-06 05:49:32 -04:00
|
|
|
|
2018-10-15 12:08:19 -04:00
|
|
|
Env vars: `DENO_BUILD_MODE`, `DENO_BUILD_PATH`, `DENO_BUILD_ARGS`, `DENO_DIR`.
|
2018-09-09 11:24:11 -04:00
|
|
|
|
|
|
|
## Contributing
|
|
|
|
|
2018-10-04 05:01:21 -04:00
|
|
|
1. Fork [this repository](https://github.com/denoland/deno) and create your
|
|
|
|
branch from `master`.
|
2018-09-09 11:24:11 -04:00
|
|
|
2. Make your change.
|
|
|
|
3. Ensure `./tools/test.py` passes.
|
|
|
|
4. Format your code with `./tools/format.py`.
|
|
|
|
5. Make sure `./tools/lint.py` passes.
|
|
|
|
6. Send a pull request.
|
2018-10-04 05:01:21 -04:00
|
|
|
7. Sign the [CLA](https://cla-assistant.io/denoland/deno), if you haven't
|
|
|
|
already.
|
2018-10-04 03:58:28 -04:00
|
|
|
|
|
|
|
<!-- prettier-ignore -->
|
|
|
|
[avy badge]: https://ci.appveyor.com/api/projects/status/yel7wtcqwoy0to8x?branch=master&svg=true
|
|
|
|
[avy link]: https://ci.appveyor.com/project/deno/deno
|
|
|
|
[tci badge]: https://travis-ci.com/denoland/deno.svg?branch=master
|
|
|
|
[tci link]: https://travis-ci.com/denoland/deno
|