Node.js 18 新特性解读

Python、JavaScript和Rust的Web性能比较 - Alex Python使用FastApi测试;Node.JS使用Fastify;Rust则使用Actix。 选择的Python和Node框架,是在搜索 "最快的<某语言>api "时得到的最高结果;Rust的Actix是一直高度维护的。 测试的基础很简单;在我的MacBook Pro M1上,每个框架处理来自网络服务器的5000个基本 "Hello, World "响应需要多长时间? 我用来运行测试的代码非常简单,显然,我们只关心速度: Python <span. 阅读详情

Node.js 刚刚发布了 18.0.0 版本,内置了 fetch、node:test 等标准模块。


如何快速体验

推荐用fnm ,nvs,nvm等 Node.js 版本管理器。

$ fnm install 18Installing Node v18.0.0 (arm64) $ fnm use 18Using Node v18.0.0 $ node -vv18.0.0复制代码

需要注意的是,该版本不是 LTS 版本,请勿在生产环境使用,需要等到 2022-10-25 才会成为 LTS 版本。


Looking to the future

The project is also continuing its ‘Next 10’ effort. The goal of this effort is to reflect on what led to success in the first 10 years of Node.js and set the direction for success in the next 10.

Node.js 官方启动了 next-10next-10 工作,并讨论出了未来重要的几件事未来重要的几件事未来重要的几件事:

  • 现代化的 HTTP

  • 友好的类型支持

  • 对初学者更友好的渐进式文档

  • 对 ECMAScript 规范的支持和及时跟进

  • 可观测性,包括 logging/metrics/tracing,以及 APM 等

  • 更好的多线程支持

  • 支持打包为单文件的分发方式


Fetch API

前端同学应该都很熟悉fetch()这个 API,它提供了标准的网络请求能力,取代了远古的 XMLHttpRequest 。

反观 Node.js 侧,官方提供的 http.request(),太底层太基础了,用起来往往需要大量的封装。譬如 302 后自动跳转、文件上传、响应结果解析等等。

因此在 Node.js 社区有非常多的上层请求库封装:

  • 曾经广受社区欢迎的 request 库去年宣布停止维护宣布停止维护后,也引起了社区比较大的混乱。。

  • 我们 Egg 内置的是 urlliburllib,沉淀了阿里多年在网络请求上踩的坑,足够稳定,不过代码也有点久远了。

去年 Node.js 官方推出了 undiciundici,一个非常现代化的库,具备优越的性能,良好的扩展性,内置的 mock 等能力,集大成者。

从而 Node.js 终于内置了新的请求库,它遵循 Fetch 规范Fetch 规范,底层就是基于 undici 来实现的。

const res = await fetch('https://nodejs.org/api/documentation.json');if (res.ok) {  const data = await res.json();  console.log(data);}复制代码

就这么简单,比  http.request()那一坨 callback-style 代码简洁多了,平时写个脚本啥的,不用再引入额外的类库了。

全局增加了 fetch, FormData, Headers, Request, Response 这几个 API,以及 Web Streams API。

可能是为了遵循规范, undici 的很多能力如 Mock,Proxy,Pool 等都没有提供出来。


Test Runner

单元测试很重要,很多新兴的编程语言都是会内置对应的能力,但前端这块一直都是由社区来实现,前端同学耳熟能详的 Test Runner 有 MochaMocha、Jest。

// mocha showcaseimport assert from 'assert/strict'; describe('test/index.test.js', () => {  it('test1', async () => {    const res = await fetch('https://nodejs.org/api/documentation.json');    assert(res.ok);  });    it.skip('skip some test', () => {});});复制代码

终于,Node.js 在 18.x 里官方支持了Test 能力 Test 能力:

import test from 'node:test';import assert from 'assert/strict'; // 等价于 describe()test('asynchronous passing test', async () => {  const res = await fetch('https://nodejs.org/api/documentation.json');  assert(res.ok);}); test('multi level test', async (t) => {  // 等价于 it()  await t.test('subtest 1', (t) => {    assert.strictEqual(1, 1);  });   await t.test('subtest 2', (t) => {    assert.strictEqual(2, 2);  });}); // 等价于 describe.skip() / it.skip()test('skip option', { skip: true }, () => {}); // 等价于 describe.only() / it.only()test('only option', { only: true }, () => {});复制代码

可以看到:

  • 语法其实差不多,会更简洁一点,就一个 test(),options 除了 skip 和 only 外,还支持 concurrency 并发。

  • 无需启动器,每一个文件都是一个可执行的 Node.js 代码。

  • 暂未支持 before/after/beforeEach/afterEach 能力,看 issue 描述会后续支持。

  • 暂未支持 Reporter,但日志输出为标准 TAP 格式,所以应该很容易能复用现有的社区生态。

类似覆盖率的演进过程,以前我们需要通过 nyc 对代码转译打桩,现在变为的 Node.js 内置覆盖率输出,nyc 变为 c8 这样的覆盖率报告生成工具。

后续 mocha 等估计会变为类似的上层封装,提供批量执行 和 Reporter 等能力。


Build-time user-land snapshot

简单的说,可以把某个 js 直接编译成 v8 snapshot,从而可以极大的提速启动时间。

目前这个版本,还只能通过 Node.js 源码来编译,且只能编译成 Node.js Runtime 的方式,即 Build-time。

# 把一段 markdown 渲染的逻辑,直接打包到 Node Runtime$ cd /path/to/node/source$ ./configure --node-snapshot-main=marked.js$ make node # 执行编译好的 Node Runtime$ out/Release/node> const html = globalThis.marked('# this is title');复制代码

秋怡正在继续推进该能力,未来可以无需编译 Node.js 源码:

$ node --build-snapshot --snapshot-blob marked.blob marked.js $ node --snapshot-blob marked.blob复制代码

V8 引擎升级

内置的 V8 引擎升级到 10.1 版本,值得注意的特性:

  • class fields 和 private class methods 的性能优化。

  • Intl 规范 的支持,在做日期的本地化,字符串处理的时候非常有用。

  • 数组支持 findLast() 和 findLastIndex() 等。


ESM 的支持

虽然在 18.x 中没有新的内容,但在过去的几个月中一直在持续推动 ECMAScript模块实现:

  • 对JSON Import Assertions 的支持。

  • JSON 模块的正式支持。

  • 对 HTTPS 和 HTTP 导入的实验性支持。

  • Node.js 加载器团队

  • 也在继续开发 ECMAScript 模块加载器实现。


工具链和编译器的升级

  • Linux 版是在 RHEL8 上构建的,要求 glibc 2.28 以上版本。

  • macOS 要求 10.15 以上版本。

  • Windows 很多旧版本也不支持了。

     

Vue项目升级Node 18后踩坑记:深入解读‘digital envelope routines’错误与三种修复方案 本文深入解析了Vue项目升级Node 18后常见的‘digital envelope routines’错误(error:0308010C),揭示了OpenSSL 3.0安全策略变革的技术背景,并提供了三种实用修复方案:临时环境变量设置、依赖体系现代化升级和Docker化开发环境配置,帮助开发者平衡安全性与兼容性需求。 阅读详情

相关推荐

CentOS 8 安装 Node.js 三套可靠方案与避坑指南

Node.js 是现代 Web 开发与服务端运行的核心 JavaScript 运行时,其版本管理、包加载机制和系统兼容性直接影响项目稳定性。在基于 RPM 的 Linux 发行版中,CentOS 8 因 AppStream 模块流设计、GPG 密钥过期及官方 EOL 状态,导致 `dnf install nodejs` 易锁定陈旧版本(如 v10),而 `nvm` 又常因 shell 初始化顺序或权限隔离失效。本文从底层原理切入,解析模块流(module streams)、用户级版本管理(nvm)与二进制部

weixin_33704591的博客 444

nvm安装node18以上的版本。

如果是MacOS,再命令行前加sudo,例如:sudo nvm use 18.18.2。注意:如果有乱码,win系统使用管理员身份打开命令行,重新执行即可。3、使用nvm use 18.18.2。4、查看node版本,安装成功。2、使用nvm ls查看版本号。1、cmd打开命令行窗口。

weixin_45345234的博客 1万+

nodejs urllib 库

nodejs urllib 库

NodeJS安装

因为java行业不景气,人才严重过剩,像我我这样的人,只能选择往广度走走,开始学Vue3.Vue3现在默认要NodeJs版本16及以上,所以我这里安装了18.18.0的,目前逛网最新稳定版本是20版本的。

FurtherSkyQ的博客 4244

基于FPGA的TDC延迟链优化与码密度校准方法(1)——原理与实现

本文深入探讨了基于FPGA的时间数字转换器(TDC)延迟链非均匀性问题及其码密度校准方法。通过分析工艺偏差、温度电压影响等根源,详细介绍了码密度测试原理、逐位校准技术及气泡消除算法,并分享了自适应校准策略与多场景应用实践,有效提升TDC测量精度至皮秒级。

kiwi8的博客 488

小曾WRF自学日记(3)渐入佳境 ——WRF实例-数据下载与WPS前处理

ww

weixin_46297571的博客 1480

NodeJS学习三

url模块nodejs有个url模块,引入进来可以进行前端get方式的请求。const urlLib = require('url'); var obj = urlLib.parse('http://www.baidu.com?name=ime&amp;pass=234',true); console.log(obj.pathname,obj.query);结果如下:/ { name: 'ime'...

Yz_loong的博客 525

lidar点云比赛-Southlidar软件使用入门

lidar点云比赛-Southlidar软件使用入门 广西高校重点实验室培训基地 系统控制与信息处理重点实验室 本篇博客来自河池学院: 智控无人机小组 写作时间:2020.09.29 一、软件资源及安装 1.下载地址: https://pan.baidu.com/s/1jN1pynmAZOqj5mMx774pVg 提取码:gkvv (资源来自南方测绘) 2.安装 进入链接,找到软件文件夹, 内含文件即为安装包 3.下载成功后按提示安装即可 4.安装成功后桌面自动创建一个快捷方式 二、界面布

qq_49621416的博客 4891

题目改成Node18 新特性解读

大厂技术高级前端Node进阶点击上方程序员成长指北,关注公众号回复1,加入高级Node交流群作者:天猪 地址:https://www.zhihu.com/people/liuyong25/posts概述Node.js 刚刚发布了 18.0.0 版本,内置了 fetch 和 node:test 等标准模块。「一句话点评:std lib 在标准化,user li...

程序员成长指北 395

中小型微服务系统 硬件设备如何部署,QPS大概多少

作为一名合格的开发工程师,不仅仅要在前期开发阶段对业务和技术有深入了解,知道选用哪种合适的技术,业务如何拆分,还要思考后期线上环境,资源,延迟,性能等如何优化维护以及分布式系统一些线上生产的一些问题。 本篇主要针对之前了解的情况对硬件设备资源做一个简单的介绍: 首先分布式系统线上实践问题,我们应该对公司的流量,各个服务,网管,注册中心应该如何部署,部署多少台机器才合适,每台机器的配置如何,每天整体流量有多少,高峰期的请求量有多少,你的整体系统是否扛得住(注:很多公司现在直接使用K8S docker 实现

wangxuelei036的博客 1万+

matlab数学建模练习(2)练习电子科技大学数学实验

【代码】matlab数学建模练习(2)练习电子科技大学数学实验。

c_wrj_的博客 1435

node.js从入门到快速开发一个简易的web服务器

fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求.fs.readFile() 方法,用来读取指定文件中的内容fs.writeFile() 方法,用来向指定的文件中写入内容使用一个fs常量接收这个fs,我们接收了这个fs,后面就可以调用fs里面的方法读取指定文件中的内容fs.readFile()的语法格式参数optins解读参数1:必选参数,字符串,表示文件的路径参数2:可选参数,表示以什么编码格式来读取文件。

qq_64039411的博客 2967

半导体设备系列(2) 半导体设备与工厂控制仿真器Demo编写

基于C/S架构用C++编写半导体设备仿真器与工厂控制仿真器

追赶时代的博客 610

前端食堂技术周刊第 34 期:Node.js v18 、Nuxt 3 RC1、Parcel v2.5.0、计算机程序的构造和解释、Linux 命令行世界生存指南

- Node.js v18 - Nuxt 3 RC1 - Parcel v2.5.0 - HTTPie 是怎样失去了 54k GitHub 星星 - 计算机程序的构造和解释 — JavaScript

童欧巴的博客 2161

AI原生SaaS应用的自动化运维体系构建

随着ChatGPT掀起的AI原生应用浪潮,越来越多SaaS(软件即服务)产品开始以"AI优先"的方式设计——从用户交互到核心功能,都深度依赖机器学习模型(如推荐算法、智能客服)、实时数据流(如用户行为分析)和弹性算力(如大模型推理)。这类应用的运维需求与传统SaaS完全不同:传统运维像"修水管",哪里漏了补哪里;AI原生运维则像"照顾会成长的宠物",需要实时感知模型状态、数据变化和流量波动,主动调整资源。

AI天才研究院 1079

全球建筑物提取数据集(免费下载):微软/GlobalMLBuildingFootprints

这个是GitHub上的开源数据集: https://github.com/microsoft/GlobalMLBuildingFootprints 介绍 必应地图正在世界各地发布开放式建筑足迹。我们从 2014 年到 2021 年间的 Bing Maps 图像中检测到了 7.77 亿座建筑物,包括 Maxar 和 Airbus 的图像。数据可在 ODbL 下免费下载和使用。该数据集补充了我们的其他版本。 包括的地区 执照 此数据由 Microsoft 根据Open Dat..

此星光明博客 6288

Node 24 正式发布,你无法再忽视它的存在了!

然而,不少开发者仍在使用 Node 16 甚至 Node 14,这不仅造成兼容性问题,更让开发体验陷入泥潭。如果升级过程遇到问题,这恰恰意味着发现了项目潜在的技术债务,也为未来的技术架构打下更稳固的基础。然而,技术生态是持续演进的,项目的依赖关系与社区工具也在不断更新。面对新的技术生态环境,推荐尽早开始升级适配工作,避免技术债务积累,充分利用 Node.js 生态圈的最新优势。虽然模块系统的兼容问题依然存在,但在 Node 24 中这种情况得到了极大的缓解,开发体验得到显著提升。经常产生冲突和困扰。

粉丝们务必加入微信粉丝群 2171

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

探索与实践:React 18 设计模式与最佳实践第四版

探索与实践:React 18 设计模式与最佳实践第四版 去发现同类优质开源项目:https://gitcode.com/ 在这个快速迭代的前端开发世界中,React以其强大的组件化能力和简洁的API赢得了开发者们的广泛赞誉。如果您正在寻找一本能够帮助您深入理解并充分利用React的书籍,那么《React 18设计模式与最佳实践第四版》无疑是您的不二之选。 项目介绍 这本书不仅仅是一本代码仓库,它是...

gitblog_00062的博客 483

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

AI助力Node.js下载:智能推荐最佳版本与依赖

他们的Kimi-K2模型对Node.js生态理解很到位,有次我输入"需要支持WebSocket的实时应用",不仅返回了Node.js版本,还推荐了ws和socket.io的优化组合方案。下面分享我的实践过程,或许能帮你少走弯路。最惊喜的是部署体验——写好逻辑后点击按钮就能生成可访问的Web服务,自动处理了端口映射和HTTPS证书,省去了至少半天的运维工作。有个实际案例:同事的TypeScript项目持续集成失败,AI工具发现是CI环境Node.js版本低于ts-node要求,10秒就定位了问题。

AmberLeopard26的博客 834

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

从 ES6 到 ES2025:JavaScript 十年进化全览,这些新特性你必须掌握!

JavaScript十年进化:从ES6到ES2025新特性全解析 摘要:本文系统梳理了JavaScript从ES6(2015)到即将发布的ES2025(ES16)的关键演进历程。

neal 922

Vue.js开发环境配置全攻略:从Node.js到Vite的完整搭建流程

在现代前端开发中,构建工具链的配置是项目成功的基础。其核心原理在于通过模块化管理和构建流程,将开发者编写的源代码转换为浏览器可执行的代码,从而提升开发效率和代码质量。这一技术价值体现在标准化开发流程、实现热更新和代码优化等方面,广泛应用于单页应用、企业级后台等场景。以Vue.js项目为例,环境配置涉及Node.js运行时、npm包管理器和Vite构建工具等关键组件。其中,npm镜像源的配置和Vite的按需编译特性是提升开发体验的重要环节,能有效解决依赖安装慢和构建效率低下的问题。通过合理配置这些工具,开发者

weixin_33895657的博客 378

解决npm install cnpm -g报错:EPERM权限问题与Node.js版本兼容性实战

本文针对Windows系统下执行`npm install cnpm -g`命令时常见的EPERM权限错误,深入剖析了其与Node.js版本兼容性的内在关联。文章提供了两种核心解决方案:一是升级Node.js版本至符合要求,一劳永逸;二是指定安装兼容的旧版cnpm作为临时措施。同时,文中还探讨了Windows权限管理对npm全局安装的影响,并分享了Node.js环境维护的最佳实践,帮助开发者从根本上规避此类问题。

5b6n7m8的博客 171

Node.js项目依赖管理与环境配置实战指南

在软件开发中,依赖管理和环境配置是保障项目稳定性和团队协作效率的基础。其核心原理在于通过版本控制和锁文件机制,确保不同环境下依赖树的一致性,从而避免“在我机器上能跑”的经典问题。这一技术价值在于提升开发流程的可重复性和部署可靠性,广泛应用于前端构建、后端服务和工具链开发等场景。本文聚焦Node.js生态,深入解析package.json的依赖版本语义(如^和~的区别)以及package-lock.json的作用,并针对常见的npm install缓慢和版本不一致问题提供解决方案,帮助开发者构建稳健的工程化实

weixin_34166472的博客 329

深入解析Node.js依赖库版本冲突:GLIBC与GLIBCXX缺失问题的全面解决方案

本文深入解析了在Linux服务器(如CentOS 7)上部署Node.js应用时,因系统库版本过低导致的GLIBC与GLIBCXX缺失问题。文章提供了详细的诊断方法,并重点阐述了通过手动编译升级GLIBC和GCC来彻底解决`GLIBC_2.28`等版本冲突的完整步骤与风险规避指南,同时推荐了使用Docker容器化等更安全的替代方案。

websocket5live的博客 448
上一篇: Scala中的底类型(bottom types)
下一篇: Spring事务的传播级别
IT小谷
博客等级 码龄5年 33粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值