Deno
Deno20195keroxp
Deno2018620191Deno
Deno1Denodeno-ja
1Deno2020
2019/12/4Denov0.25.0
Deno2018/12 ~ 2019/12145v0.2.5 ~
Deno1
v0.4Weekly Releasev1
/TLS
13Deno Deno.listen
v0.19.0 Deno.dialTLS v0.22.0 Deno.listenTLS TLS
HTTPServestTLSHTTPS
TCPHTTPSKeep-Alive
gncargo
v0.18.0Deno使GNRustCargo
GnGoogle使Ninja
Gn cargo build , cargo test Deno
Denosetup.py
Denogit cloneCargorustup
FlatBuffersJSON+SharedArrayBuffer
DenofsnetOSTypeScript使RustOpOperationPromise
DenoProtocolBuffers使FlatBuffers
FlatBuffers
deno_coreOp2使
SharedArrayBuffer
op_read , op_write Op使
RustV8SharedArrayBufferQueue使
使QueueJSONOp
Op
JSON
FlatBuffersJSON
FlatBuffersJSON
deno_std
deno_stdnet12deno_std
v0.21.0deno_std
std
deno_stdRyan
RustTypeScriptstd
std
web
https://deno.land
WebHTML10React + Netlify
TypeScript Compiler API使JSDocReact
JSX
v0.20.0DenoJSX/TSX
TypeScriptJSXDeno
JSX使
JSX
6Deno
hashrock
DenoJSX使React使ReactJSDeno使
https://servestjs.org Deno + React
CIGithub Actions
Github ActionsDenoCIGHA
TravisCIAppVeyor使CI
wasm
DenoWebAssembly(wasm)import
typescript
import { fib } from "./fib.wasm";
console.log(fib(20));
GoRustwasmDeno使
wasmimportprivilegeDenowasmimportprivilege --allow-wasm
denoCLI便
deno fmt
deno便
Prettier
deno bundle
deno
URL importJS
Deno
deno test
go test
*_test.ts importjsstd runTests
deno install
denoCLI
dink
typescript
$ deno install dink https://denopkg.com/keroxp/dink/main.ts --allow-write --allow-read --allow-net
dink ~/.deno/bin/dink
syumaiDenodenogetstd
priviledge
--allow-read , --allow-write , --allow-net
--allow-read=/deno/src/info.json , --allow-write=/tmp
--allow-net listen/dial
--allow-net=0.0.0.0:8000
fetch --allow-net=deno.land,127.0.0.1:8080 hostname
Lockfile
v0.23.0integrity check
typescript
deno fetch main.ts --lock=lock.json --lock-write
使
package-lock.jsonyarn.lock
DenoPR
.so .dylib Deno
DB使DenoNode.jsC++/C
Emscriptenwasm使
Rust
C++RustFFI使
kt3k
Rust
//
fn init(context: &mut dyn PluginInitContext) {
context.register_op("test_io_sync", Box::new(op_test_io_sync));
}
//
pub fn op_test_io_sync(data: &[u8], zero_copy: Option<PinnedBuf>) -> CoreOp {
if let Some(buf) = zero_copy {
let data_str = std::str::from_utf8(&data[..]).unwrap();
let buf_str = std::str::from_utf8(&buf[..]).unwrap();
println!(
"Hello from native bindings. data: {} | zero_copy: {}",
data_str, buf_str
);
}
let result = b"test";
let result_box: Buf = Box::new(*result);
Op::Sync(result_box)
}
rustclinux .so max .dylib
TypeScriptRust .dispatch
const plugin = Deno.openPlugin(`plugin`);
const test_io_sync = plugin.ops.test_io_sync;
const response = test_io_sync.dispatch(
new Uint8Array([116, 101, 115, 116]),
new Uint8Array([116, 101, 115, 116])
);
Promise
Node polyfill
Node.jsCommonJSDenoPolyfill
Deno require Node.js fs , child_process polyfillDeno
Node.jsfschild_processNode.jsAPIDeno
Node.jsDeno
Node.jsDenopolyfill
DenoAPI Deno DenoNode.jsDenoDeno fetch URL WHATWGAPIpolyfillDenoNode.js
DenoNode.jsJS
DenoNode.js
Node.js
DenoNode.js
ECMA require
fs.promise util.promisify
ESM .mjs
DenoNode.jsNode.js
DenoNode.jsDenoDenoNode
Denopolyfill使Node.jsDenoAPIDeno使
DenoAPINode.js使
hr
Deno
Deno
使
Node.jsv0.0.1v4.0.06
v1Production ReadyNode.js2015
Denov1
Ryan712
12v1
v1
Denov1
80~85%
Web
WebDenoProduction Ready
HTTPDeno
2020
Deno
2020Deno使
/deno-ja Slackjoin
2020Deno