node.js 之父 Ryan Dahl 发起的新项目:deno,力争打造一个基于 v8 引擎的安全的 TypeScript 运行时,同时实现 HTML5 的基础 API。
需要注意的是:Deno正处于开发阶段。 鼓励勇敢的早期开发者尝试,但是需要说明的是它可能存在很多的错误,并且API可能没有任何通知的时候随时更改。
2 介绍
2.1 设计原则
2.2 设计目标
支持TypeScript开箱即用。
没有package.json。 没有。 未与Node明确兼容。
与浏览器一样,允许从URL导入:
远程代码在首次执行时被提取和缓存,并且在使用 --reload 标志运行代码之前永远不会更新。 (所以,这仍然适用于飞机。有关缓存的详细信息,请参阅 ~/.deno/src。)
使用“ES模块”并且不支持 require()。
可以控制文件系统和网络访问以运行沙盒代码。 V8(非特权)和 Rust(特权)之间的访问,只能通过此 flatbuffer 中定义的序列化消息完成。 这使审计变得容易。 例如,要启用写访问,请使用标志 --allow-write 或网络访问 --allow-net。
只发送一个可执行文件。
永远死于未捕获的错误。
旨在支持顶级等待。
2.3 浏览器兼容性
Deno程序的子集完全用 JavaScript 编写,不会导入特殊的“deno”模块,也应该能够在现代Web浏览器中运行而不需要更改。
3 安装
3.1 使用二进制安装
Deno适用于OSX,Linux和Windows。 Deno是一个单独的二进制可执行文件,它没有外部依赖。
deno_install提供了下载和安装二进制文件的便捷脚本。
curl -fL https://deno.land/x/install/install.sh | sh
iex (iwr https://deno.land/x/install/install.ps1)
注意:根据您的安全设置,您可能必须首先运行Set-ExecutionPolicy RemoteSigned -Scope Current User以允许执行下载的脚本。
scoop install deno
也可以通过下载 https://github.com/denoland/deno/releases 上的 tarball 或 zip 文件手动安装Deno。 这些包只包含一个可执行文件。 您必须在Mac和Linux上设置为可执行。
一旦安装并添加到$PATH中,可以命令行中请尝试:
deno https://deno.land/welcome.js
# Fetch deps.
git clone --recurse-submodules https://github.com/denoland/deno.git
cd deno
./tools/setup.py
# You may need to ensure that sccache is running.
# (TODO it's unclear if this is necessary or not.)
# prebuilt/mac/sccache --start-server
# Build.
./tools/build.py
# Run.
./target/debug/deno tests/002_hello.ts
# Test.
./tools/test.py
# Format code.
# TODO: set PYTHONPATH in format.ts when run API has env option.
PYTHONPATH=third_party/python_packages deno ./tools/format.ts --allow-read --allow-run
为了确保可重现的构建,deno在git子模块中具有大部分依赖性。 但是,您需要单独安装:
Mac用户的额外步骤:
Windows用户的额外步骤:
将 python.exe 添加到 PATH(例如,设置 PATH=%PATH%;C:\Python27\python.exe) 使用 C++ 工具包获取 VS Community 2017 with Desktop 开发,并确保选择下面列出的以下所需工具以及所有 C++工具。
其他有用的命令:
# Call ninja manually.
./third_party/depot_tools/ninja -C target/debug
# Build a release binary.
DENO_BUILD_MODE=release ./tools/build.py :deno
# List executable targets.
./third_party/depot_tools/gn ls target/debug //:* --as=output --type=executable
# List build configuration.
./third_party/depot_tools/gn args target/debug/ --list
# Edit build configuration.
./third_party/depot_tools/gn args target/debug/
# Describe a target.
./third_party/depot_tools/gn desc target/debug/ :deno
./third_party/depot_tools/gn help
# Update third_party modules
git submodule update
环境变量:DENO_BUILD_MODE,DENO_BUILD_PATH,DENO_BUILD_ARGS,DENO_DIR。