据我所知,Deno 总是在启动时将 TypeScript 编译为 JS,并且没有“监视”模式。据我了解,除了 TS 监视模式之外,TypeScript 不存在“增量编译”之类的东西。所以,如果想要快速编译TS,就必须使用watch模式。
所以我希望 Deno 有观看模式。但事实并非如此。那么 Deno 的 TS 编译速度如何?
注意:我知道 Deno 使用 tsc 的 V8 快照,以便 tsc 启动很快,但对于大型 TS 项目,tsc 的启动时间与实际编译时间相比会相形见绌。所以我不是在问 V8 快照,而是在问 Deno 使用了哪些其他技巧。它使用构建守护进程吗?
import { serve } from "https://deno.land/std@0.50.0/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
// listing to requests
for await (const req of s) {
const res = await fetch('https://api.github.com/users')
let data = await res.json()
console.log('test- call')
req.respond({ body:JSON.stringify(data)});
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,当我尝试点击http://localhost:8000/时,我可以看到控制台记录两次“test-call”。
不知道为什么会发生这种情况。需要帮助才能理解。
我在我的 mac 上安装了 denon,然后尝试运行这个 cmd: denon --init
我收到这条消息 zsh: command not found: denon
即使我尝试使用 来检查版本denon --version,它也会抛出相同的消息。
我试图让 Web Worker 管理其状态,同时服务多个异步请求。
工人.ts 文件
let a =0; //this is my worker's state
let worker=self as unknown as Worker;
worker.onmessage =(e)=>{
console.log("Rec msg", e.data);
if(e.data === "+1"){
setTimeout(()=>{
a=a+1;
worker.postMessage(a);
},3000);
}else if(e.data=== "+2"){
setTimeout(()=>{
a=a+2;
worker.postMessage(a);
},1000)
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的主文件:main.ts
let w =new Worker("./worker.ts", {type: "module"})
let wf =async (op: string)=>{
w.postMessage(op);
return new Promise<any>((res,rej)=>{
w.onmessage=res;
});
}
(async()=>{
let f1 = await wf("+1");
console.log("f1",f1.data);
})();
(async()=>{
let f2 = await wf("+2");
console.log("f2",f2.data);
})()
Run Code Online (Sandbox Code Playgroud)
只能f2归还,就f1 …
例如,我有一些 JS 函数的字符串表示形式,该函数是从用户接收的,应该在服务器端执行。
有什么方法可以检查这段代码是否可以安全执行?我所说的安全是指:仅使用自定义上下文和基本类,不要尝试重新分配本机对象,不要尝试进行额外的网络调用或无限循环,等等。
以前我曾使用过vm2模块NodeJS来达到这样的目的。
我已经看到它Deno.env似乎获取了有关我的 PC 和某些路径的信息。
但是它从哪里知道呢?我如何能够填写我自己的.env文件?
我听说 Deno 是建立在 Rust 之上的。Deno 和 Rust 一样快,还是 Rust 更快?我找不到 Deno 与 Rust 甚至 Deno 与 Golang 之间的性能比较。
我试图理解自动类型规则。在这个例子中我
步骤 1、2 和 4 按预期工作。在第 4 步,打字稿清楚地知道“map”参数不能是未定义的。但在第 3 步我必须显式添加一个 ! 否则我会收到错误消息。
该代码可以工作(现在我已经添加了感叹号/断言),但它没有意义。这是 TypeScript 的正确行为吗?我的代码中做错了什么吗?3 和 4 都引用同一个变量,并且 2 是在它们之前完成的,所以我看不出有什么区别。
function parseUrlArgs(inputString: string, map?: Map<string, string>) : Map<string, string> {
if (!map) {
map = new Map();
}
//map = map??new Map(); // This has the exact same effect as the if statement, above.
// Note: JavaScript's string split would not work the same way. If there are more than two equals signs, String.split() would ignore …Run Code Online (Sandbox Code Playgroud) 我尝试通过 Supabase 的 Edge Functions 连接到 Stripe,但我不断收到此错误:
相对导入路径“http”不以 / 或 ./ 或 ../ 为前缀
我一直在挖掘,它似乎与从 Typescript 到 Javascript 的捆绑有关,但我还没有找到解决方案。
我的代码和官方的一样: https: //github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/stripe-webhooks/index.ts
我注意到,如果删除 Stripe 导入,我可以进行部署,所以我猜它可能是相关的,但我无法理解为什么,因为其他导入(例如 Deno 的 Supabase 导入)可以正常工作。
谢谢!!
import { serve } from 'https://deno.land/std@0.132.0/http/server.ts'
// esm.sh is used to compile stripe-node to be compatible with ES modules.
import Stripe from 'https://esm.sh/stripe@10.13.0?target=deno&deno-std=0.132.0'
const stripe = Stripe(Deno.env.get('STRIPE_API_KEY'), {
// This is needed to use the Fetch API rather than relying on the Node http
// package.
httpClient: Stripe.createFetchHttpClient(),
})
// …Run Code Online (Sandbox Code Playgroud) 在 Deno 中,要导入 TypeScript 模块,您自己的代码文件是否必须是 TypeScript?或者 Deno 会在导入模块之前自动将 TypeScript 转换为 javascript 吗?
我希望所有代码文件都是 EcmaScript 模块(js 或 mjs,但不是 ts)。
与当今其他人不同,我想避免在自己的代码中使用 TypeScript。我不喜欢静态类型的僵化,而且 Typescript 不是 EcmaScript 标准的一部分。仅 EcmaScript 就具备了我管理大型项目所需的一切。对我来说,TypeScript 是一种过时的技术,自从 ES6 模块出现以来就不再需要了。TypeScript 解决的问题类型是我没有的问题。
deno ×10
typescript ×3
javascript ×2
node.js ×2
macos ×1
rust ×1
supabase ×1
terminal ×1
web-worker ×1