前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Node.js v17.6.0 发布,允许从 HTTP 和 HTTPS URL 导入模块

Node.js v17.6.0 发布,允许从 HTTP 和 HTTPS URL 导入模块

作者头像
五月君
发布2022-04-06 12:16:43
1.2K0
发布2022-04-06 12:16:43
举报
文章被收录于专栏:Nodejs技术栈Nodejs技术栈

Node.js v17.6.0 版本于 2022-02-23 发布,一个显著的特性是试验性支持从 HTTP 和 HTTPS 导入模块,这里面也包括很多问题,包括从安全方面考虑,目前在 Node.js 中使用还是有一些限制。及一些其它的常规小错误修复。

允许从 HTTP 和 HTTPS URL 导入模块

Node.js v17.6.0 一个新的实验性功能是允许我们从 HTTP 或 HTTPS URL 导入 ES Module。这使得一些类似于 Web 浏览器导入的工作也可以在 Node.js 中完成,同时也消除了一些 Node.js 与 Deno 之间的差异,即 Deno 允许使用 HTTPS 导入包。因为一些安全性和稳定性的问题和浏览器相比还是有些差异的。

以下是一个导入 HTTP 资源的简单示例,该功能现在处于实验性状态,运行时需添加 --experimental-network-imports 标志。

代码语言:javascript
复制
// hello.mjs
export default function hello(message) {
  console.log(`Hello ${message}`); 
}

$ http-server
Starting up http-server, serving ./
Available on:
  http://127.0.0.1:8080

// index.mjs
import hello from 'http://127.0.0.1:8080/hello.mjs'; 
console.log(hello('codingMay')); // Hello codingMay

当前并非所有的 ES Modules 模块都可以加载,以下两个 Example,第一个尽管是加载的 HTTPS 资源,但不是 HTTP/1,Example 2 导入了非网络依赖资源。

代码语言:javascript
复制
// Example1: 加载 HTTPS 资源
import hello from 'https://gitee.com/qufei1993/esmodule-https-import-example/blob/master/hello.mjs';
console.log(hello('codingMay'));


输出错误:RangeError [ERR_UNKNOWN_MODULE_FORMAT]: Unknown module format: null for URL https://gitee.com/qufei1993/esmodule-https-import-example/blob/master/hello.mjs

// Example2: 加载其它非网络资源
// hello.mjs
import fsPromise from 'fs/promises';
export const readFile = filename => fsPromise.readFile(filename);

// index.mjs
import hello from 'http://127.0.0.1:8080/hello.mjs'; 

输出错误:TypeError [ERR_INVALID_URL_SCHEME]: The URL must be of scheme file

HTTP 和 HTTPS 导入的一些限制:

  • 仅支持 HTTP/1,不支持 HTTP2/HTTP3。
  • HTTP 仅限于环回地址。
  • 身份验证不会发至服务器,例如 Authorization、Cookie 和 Proxy-Authorization 标头不会发送到服务。
  • 永远不会在目标服务器上检查 CORS。
  • 无法加载非网络依赖项。
  • 默认情况下不启用基于网络的加载,需要通过--experimental-network-imports 标志打开加载 HTTP 或 HTTPS 资源。

Process 获取活跃具柄和请求方法废弃通知

这个改变主要是在文档记录了 _getActiveHandles_getActiveRequests 的弃用通知,以便支持更好的公共 API。

这两个以下划线开头的 API 被代替的公共 API 方法 process.getActiveResourcesInfo() 在 Node.js v17.3.0 所添加,该方法返回事件循环活动状态的资源类型。

代码语言:javascript
复制
import { getActiveResourcesInfo } from 'process';
import { createServer } from 'http';

console.log('Before:', getActiveResourcesInfo()); // Before: [ 'CloseReq', 'TTYWrap', 'TTYWrap', 'TTYWrap' ]
setTimeout(() => {
  console.log('After:', getActiveResourcesInfo()); // After: [ 'TTYWrap', 'TTYWrap', 'TTYWrap', 'TCPServerWrap', 'Timeout' ]
}, 5000);

createServer((req, res) => res.end('OK')).listen(3000);

其它的一些升级事项

  • stream:恢复 map 规范合规性。
  • build:移除损坏的 x32 arch 支持。
  • fetch:当 fetch 启用时(--experimental-fetch),global 对象添加 FormData。
  • fs:cp 和 cpSync 支持相对链接复制。
  • process: 废弃 multipleResolves。
  • deps: 更新 npm 到 8.5.1。

Reference

  • https://itnext.io/importing-an-es6-modules-over-http-https-in-a-node-js-225ffba8c3fc
  • https://nodejs.org/en/blog/release/v17.6.0/
  • https://nodejs.org/dist/latest-v17.x/docs/api/esm.html#https-and-http-imports

- END -

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nodejs技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 允许从 HTTP 和 HTTPS URL 导入模块
  • Process 获取活跃具柄和请求方法废弃通知
  • 其它的一些升级事项
  • Reference
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档