NPM 即将被 Node.js 官方抛弃

NPM 即将被 Node.js 官方抛弃,第1张

突然发现在 Nodejs 1690 的官方文档里面,多了个 Experimental 的 Corepack :

看完一脸懵逼:这是啥?要干掉 NPM?为啥这么突然?

于是进一步翻了仓库和对应的讨论:

简单来说,Corepack 会成为 Nodejs 官方的内置 CLI,用来管理『包管理工具(npm、yarn、pnpm、cnpm)』,用户无需手动安装,即『包管理器的管理器』。

先安装 Node1690 版本,然后在 packagejson 中声明对应的包管理工具:

玩起来:

我嚓,没全局安装 yarn 也能找到命令,怎么搞的?分析了下,非常粗暴。。。

其他用法:

小结: 对于大部分开发者来说,基本上无感,原来怎么用还怎么用,只是无需特意全局安装对应的包管理器了。

为什么要做这个?

简单的说,发起者认为,npm 目前是唯一的包管理工具,导致广大开发者喜爱的 pnpm、yarn 等工具成为二等公民,伤害到用户体验以及社区的良性发展。 早在 2017 年就发起的 讨论 ,在 最近的 TSC 表决 中通过。

虽然发起者 arcanis 利益相关,是 yarn 的 Lead Maintainer,但只想给他点个赞,并对 npm 说:你也有今天!

npm 这个阿斗,在 Nodejs 起步时起了很大的作用,但它毕竟是个商业公司,而且这么多年来,一直不思进取:

我们一次一次的重燃希望又一次一次的失望,这废宅只会躺平,三天打鱼两天晒网,直到今天,Nodejs 官方决定把他赶出门磨练下。

PS:需注意的是,这次动的只是 Nodejs 安装包的 CLI,而包管理服务(即 npm registry)是没有变化的,大家平时用 yarn 和 pnpm 也是连的 npm registry 或者 cnpm registry 这个国内同步源。

1var language = windownavigatorlanguage

Linux 是获取相关的环境变量,这个不难。Windows的话中文版默认都是GBK

打印头信息就可以了,因为nodejs是基于>

玩nodejs的话,最好把>首先创建一个>

node技术成为web前端领域的主流开发工具可以说本身就是一个美丽的误会,当初这个技术被开发出来使用的时候主要是为了解决后端的问题才出现的。今天,天通苑java课程培训机构就一起来了解一下node技术的发展历程和未来的发展趋势。



a)Node8进入LTS时代

Nodejs大的变化是进入Node8时代,它是一个稳定的长期支持版本(LTS),除了性能提升外,还有以下几个要点。

Async/Await支持。其实在Nodejsv76就可以通过flag支持了,在node8里直接落地。通过Async函数可以更好的进行异步流程控制,远离CallbackHell。在Async函数里,你可以通过await调用Promise,以及通过co包裹的generator,可以说,向前是完美的Async函数,向后也完美兼容各种遗留代码,称为异步终极解决方案不为过。

ES6模块支持。通过vue/react、webpack、babel和typescript等火爆发展,es6模块得到了广泛普及和应用,在Nodejsv85可以通过--experimental-modules来开启这个体验版特性。当然,你想在Nodejs更早版本里使用ES6模块,可以采用@std/esm模块。

>

b)企业级Web开发

基础框架除了应用广泛的主流Web框架Koa外,Fastify也是一直劲敌,作者MatteoCollina是Nodejs核心开发,Stream掌门,性能优化专家。Fastify基于Schema优化,对性能提升极其明显。狼叔认为这是企业级Web开发,他在这里给我们介绍了3个知名框架。

b1)Eggjs

阿里开源的企业级Nodejs框架Egg发布20,基于Koa2x,异步解决方案直接基于AsyncFunction。框架层优化不含Node8带来的提升外,带来30%左右的性能提升。

Egg采用的是『微内核+插件+上层框架』模式,对于定制,生态,快速开发有明显提升,另外值得关注的是稳定性和安全上,也是极为出色的。

b2)Nest

Nest是基于TypeScript和Express的企业级Web框架。

很多人开玩笑说,Nest是像Java开发方式的,确实,Nest采用TypeScript作为底层语言,TypeScript是ES6超集,对类型支持,面向对象,Decorator(类似于Java里注解Annotation)等支持。在写法上,保持Java开发者的习惯,能够吸引更多人快速上手。

TypeScript支持几乎是目前所有NodeWeb框架都要做的头等大事,在2017年Nest算个知名项目,值得一提。

b3)ThinkJS

ThinkJS是一款拥抱未来的NodejsWeb框架,致力于集成项目佳实践,规范项目让企业级团队开发变得更加简单,更加高效。秉承简洁易用的设计原则,在保持出色的性能和至简的代码同时,注重开发体验和易用性,为WEB应用开发提供强有力的支持。

ThinkJS是国产老牌Web框架,在2017年10月发布v3版本,基于Koa内核,在性能和开发体验上有更好的提升。

整体来看,Nodejs在企业Web开发领域日渐成熟,无论微服务,还是Api中间层都得到了非常好的落地。2017年,唯一遗憾的是Nodejs在servless上表现的不太好,相关框架实践偏少。

c)不可不见的Api中间层

前端越来越复杂,后端服务化,今日的前端要面临更多的挑战。一个典型的场景就是在服务化架构里,前端面临的头痛的问题是异构API,前后端联调的时候,多个后端互相推诿,要么拖慢上线进度,要么让前端性能变得极其慢。进度慢找前端,性能差也找前端,但这个锅真的该前端来背么

Nodejs的Api中间层应用很好地解决了这个问题。后端不想改的时候,实在不行就前端自己做,更灵活,更能应变。

透传接口,对于内网或者非安全接口,可以采用中间层透传。

聚合接口,对异构API处理非常方便,如果能够梳理model,应变更容易。

Mock接口,通过Mock接口,提供前端开发效率,对流程优化效果极其明显,比如去哪儿开发的yapi就是专门解决这个问题的。

除此之外,前端如果想做一些技术驱动的事儿,SSR(服务器端渲染)和PWA(渐进式Web应用)也是非常不错的选择。

d)新领域(深度学习、区块链等)

1 简介

Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。

Puppeteer 默认以无头模式(headless)运行,也就是运行一个无界面的 Chrome 浏览器。

2 应用场景

21 页面生成 PDF

Puppeteer 提供了页面生成 PDF 的方法,我们可以利用这个方法来将页面导出为 PDF ,导出的 PDF 效果和 Chrome 浏览器打印功能导出的 PDF 一致。

具体的应用场景有:

22 页面截图

Puppeteer 提供了截图的方法,我们可以利用这个方法来将页面的指定区域导出为 jpeg 或 png 。

具体的应用场景有:

23 服务端渲染

单页应用(SPA)的主要内容是在 JavaScript 向服务端请求数据后渲染的,存在爬虫难以抓取主要内容、首屏加载慢等问题,而使用 Nextjs、Nuxtjs 等服务端渲染框架改造的成本较高。

如果只是为了搜索引擎优化,我们可以考虑利用 Puppeteer 来实现。我们可以在网关层判断请求的来源,如果是爬虫,直接返回由 Puppeteer 服务端渲染的 html 文件。

24 自动化UI测试

使用 Puppeteer 可以模拟 Chrome 浏览器环境,结合 JavaScript 测试框架(如 Jest)可以实现自动化 UI 测试。

Puppeteer 提供了 Mouse 类来模拟鼠标 *** 作,提供了 Keyboard 类来模拟键盘 *** 作,提供了 Touchscreen 类来模拟触屏 *** 作,并且 Puppeteer 提供的 Page 类里有很多方法可以用来 *** 作元素,比如点击元素、聚焦元素等 *** 作。

25 页面检测分析

使用 Puppeteer 提供的 pagetracing 系列方法捕获网站的 timeline trace 来对页面进行性能分析。

使用 Puppeteer 提供的 pagecoverage 系列方法来获取 JavaScript 和 CSS 覆盖率。

使用 Puppeteer 提供的 pagemetrics() 方法来获取某个时间点页面的指标数据,包括页面的 documents 数量、iframe 数量、js 事件数量、dom 节点数量、布局数量、样式重新计算数量、布局时间、样式重新计算总时间、js 代码执行总时间、任务执行总时间、占用堆内存大小、总的堆内存大小。

使用 Puppeteer 提供的 Request 类和 Response 类来监控页面发送的请求和接受的响应。

3 基础概念

Puppeteer API 是分层次的,反映了浏览器结构。


Puppeteer 使用 DevTools 协议与浏览器进行通信。

Browser 是浏览器实例,可以有多个浏览器上下文。

BrowserContext 是浏览器上下文实例,定义了一个浏览会话并可拥有多个页面。

Page 是页面实例,至少拥有一个框架(主框架mainFrame),可能还有由 iframe 创建的其他框架。

Frame 是框架实例,至少有一个默认的 JavaScript 执行上下文。可能还有与扩展插件关联的执行上下文。

Worker 表示一个WebWorker,具有单一执行上下文。

4 快速上手

41 安装 puppeteer-core

npm i puppeteer-core

puppeteer-core 是一个轻量级的 Puppeteer 版本,自 170 版本以来,官方都会发布一个 puppeteer-core 包,安装这个包时,默认不会下载 Chromium。

42 下载 Chromium

Puppeteer 官网: >到 >刚开始更推荐是用express玩一下,然后脱离express自己模仿造一个类似的轮子。
然后对各方面熟悉之后可以用express或者koa搭一个更完整的。
最后才上egg会好点,对于学习而言。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13337910.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-17
下一篇 2023-07-17

发表评论

登录后才能评论

评论列表(0条)

保存