繁体   English   中英

如何从外部链接导入 Typescript 或 Javascript 文件?

[英]How to import a Typescript or Javascript file from an external link?

我想使用 Node.js 中的一些 Deno 标准库来创建 HTTP 服务器。

我知道我可以下载它,但我想保持更新最新的库,所以我想像这样导入它们:

import { serve } from "https://deno.land/std/http/server.ts";

// Defining port to be used
const PORT = 8080
// Setting server to listen at port
const server = serve({ port: PORT });
console.log(`This Hello World server is up and running on http://localhost:${PORT}/`);

// Sending Hello World to any client that connects
for await (const req of server) {
    req.respond({ body: "Hello World!\n" });
}

理论上可以在 Node 中使用 Deno std库的有限子集(模块不使用 web API 中的任何内容,不使用 Deno API 中的任何内容,并且不包含说明符以.ts结尾的导入语句)。

但是, https://deno.land/std/http/server.ts示例中的模块不符合此标准,并且会在tsc (TypeScript) 中创建编译时错误,并在 Node.js 中创建运行时错误。

没关系,我只想使用 ES6+ 语法来创建服务器,所以我使用它:

import https from "https";
import http from "http";

export default class Server {
    readonly server: http.Server | https.Server;

    constructor(options?: http.ServerOptions | https.ServerOptions, httpsMode?: boolean) {
        this.server = (httpsMode ? https : http).createServer(options);
    }

    listen(port?: number, hostname?: string, backlog?: number) {
        let s = this.server;
        s.listen(port, hostname, backlog);
        return {
            [Symbol.asyncIterator]() {
                return {
                    async next() {
                        return {
                            done: false,
                            value: await new Promise<{request: http.IncomingMessage, response: http.ServerResponse}>(result => {
                                s.on('request', (request, response) => 
                                    result({request, response})
                                );
                            })
                        };
                    }
                }
            }
        }
    }

    close() {
        this.server.close();
    }
}

此模块在我发布 0.0.4 后在 NPM、package Newer.js上可用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM