“无关紧要”的小知识点:“xx Packages Are Looking for Funding”——npm fund命令及运行机制

“无关紧要”的小知识点:“xx Packages Are Looking for Funding”——npm fund 命令及运行机制

在 Node.js 和 npm 生态系统中,开源项目的持续发展和维护常常依赖于贡献者的支持和资助。为了让开发者更容易了解他们依赖的项目哪些有资金支持选项,npm 在6.13.0版本起引入了 npm fund 命令并默认在npm install安装依赖时触发。本文将详细介绍 npm fund 的作用、运行机制、触发时机、如何避免触发以及相关的副作用和改进建议。

什么是 npm fund 命令?

在日常npm install安装依赖的过程中,我们可能都忽略了 command 最后输出的一些信息,比如本文相关的 funding 信息,如:

3 packages are looking for funding.
Run "npm fund" to find out more.

npm fund 命令是在 npm 6.13.0 版本中首次引入的,旨在帮助开发者识别其项目依赖中可以资助的开源包。运行该命令时,npm 会列出所有包含资助选项的包及其相关链接,便于开发者快速访问这些页面并提供支持。

命令起源

在 2019 年 8 月份时,Standard JS 在其开源项目中内置广告的事件引发热议,这些广告通过一个名为 Fundingnpm 软件包展示在终端,该软件包包含在 Standard 的代码库中。之后 npm 公司宣布将禁止此类终端广告行为。

此事件后,npm 公司表示,它打算在年底前为开源开发人员开发一个众筹平台,于是乎在npm 6.13.0版本上提供了相应支持,这就是npm fund命令的主要由来。

命令作用

  • 显示资助信息npm fund 会扫描项目中的 node_modules 目录,查找每个包的 package.json 文件中是否包含 funding 字段。它会将有资助选项的包及其资助链接列出。
  • 支持开源生态:通过此功能,npm 提高了对开源项目资助的透明度,鼓励开发者参与到开源项目的资助中,帮助维护者获得资金支持。

使用方法

基本用法非常简单,只需在项目根目录中运行:

npm fund

命令将输出形如:

xx packages are looking for funding
run `npm fund` for details

再运行 npm fund,就会显示类似如下的详细信息:

package-name   https://example.com/donate

如:

├─┬ https://opencollective.com/typescript-eslint
│ │ └── @typescript-eslint/eslint-plugin@4.28.5, @typescript-eslint/experimental-utils@4.28.5, @typescript-eslint/types@4.28.5, @typescript-eslint/typescript-estree@4.28.5, @typescript-eslint/visitor-keys@4.28.5, @typescript-eslint/scope-manager@4.28.5, @typescript-eslint/parser@4.28.5
│ └─┬ https://opencollective.com/eslint
│   │ └── eslint@6.8.0
│   ├── https://github.com/sponsors/epoberezkin
│   │   └── ajv@6.12.6
│   ├── https://github.com/sponsors/sindresorhus
│   │   └── globals@12.4.0, import-fresh@3.3.0, strip-json-comments@3.1.1, ansi-escapes@4.3.2, type-fest@0.21.3, figures@3.2.0, onetime@5.1.2, globby@11.0.4
│   ├── https://github.com/sponsors/isaacs
│   │   └── glob@7.2.3
│   ├─┬ https://github.com/chalk/chalk?sponsor=1
│   │ │ └── chalk@4.1.2
│   │ └── https://github.com/chalk/ansi-styles?sponsor=1
│   │     └── ansi-styles@4.3.0
│   └── https://github.com/sponsors/ljharb
│       └── minimist@1.2.8, is-generator-function@1.0.9, qs@6.11.2, side-channel@1.0.4, call-bind@1.0.2, get-intrinsic@1.1.1, has-symbols@1.0.2, object-inspect@1.11.0
├── https://github.com/sponsors/RubenVerborgh
│   └── follow-redirects@1.15.2
└── https://ko-fi.com/tunnckoCore/commissions└── formidable@1.2.2

npm fund 的运行机制和触发时机

运行机制

  • 依赖扫描npm fund 会读取 node_modules 中每个依赖包的 package.json 文件,寻找 funding 字段。如果找到了该字段,它会提取并显示相关的资助信息。
    • 字段格式:funding 字段可以是 URL 字符串或更复杂的对象,指向资助页面。例如:
    {"funding": "https://example.com/donate"
    }
    
    或者
    {"funding": {"type": "individual","url": "https://example.com/donate"}
    }
    

触发时机

  • npm install 提示:在安装项目依赖时,如果项目中存在可以资助的包,npm 会显示类似“xx packages are looking for funding”的提示,提醒开发者可以运行 npm fund 查看详细信息。(这也是我们日常主要触发的时机)
  • 显式调用:开发者可以手动运行 npm fund 命令,以查看当前项目中支持资助的所有包和资助链接。

如何避免 npm fund 的触发?

在某些情况下,开发者或企业可能希望在 npm install 过程中避免看到这些资助提示。以下是两种实现方式:

1. 在安装时使用 --no-fund 参数

直接在运行 npm install 时添加 --no-fund 参数:

npm install --no-fund
2. 修改 .npmrc 配置文件

.npmrc 文件中加入以下配置来永久禁用资助提示:

fund=false

此配置可以放在项目的根目录下(项目下的.npmrc文件),仅作用于当前项目;也可以放在用户主目录(~/.npmrc文件),作用于全局。

*可以通过npm config ls -l查看当前项目的npm配置,默认情况下fund配置会被设置为true

禁用 npm fund 的副作用

优点:

  • 简洁输出:禁用 npm fund 提示可以减少 npm install 的输出信息,使终端显示更加清晰。
  • 减少干扰:在企业级项目中,开发者可能更专注于安装过程和依赖的调试,不需要额外的资助提示。

缺点:

  • 支持意识减弱:禁用该提示后,开发者不再会注意到可以资助的依赖,可能错失支持有价值的开源项目的机会。
  • 透明度降低:新加入的团队成员或不熟悉项目的开发者可能不知道项目中有哪些包有资助选项。
  • 开源支持意识降低:从长远来看,减少对资助信息的提示可能会让开发者对支持开源项目的重要性淡化,从而减少对依赖项目的贡献和支持。

npm fund 源码

源码文件:https://github.com/npm/cli/blob/latest/lib/commands/fund.js

以目前(2024-11)的源码内容来看,其源码机制概括来说是先使用 npm 的内部模块库函数来遍历 node_modules 目录,读取 package.json 并检查是否有 funding 字段,最后将所有符合条件的包信息格式化输出到终端。

代码流程总结:

  • 1.读取依赖树:使用 Arborist 加载项目的依赖树。
  • 2.解析资助信息:通过 libnpmfundreadTree 方法提取资助信息。
  • 3.输出格式化:根据用户配置输出 JSON 格式或使用 archy 进行可读格式的输出。
  • 4.链接打开:当提供了包名时,openFundingUrl 会尝试在浏览器中打开该包的资助链接。

最后

npm fundnpm 引入的一个有用的命令,帮助开发者支持开源项目并维持开源生态的可持续发展。虽然在某些情况下禁用它有其合理性,但在默认情况下保留该提示可以提高团队对开源项目支持的意识。根据项目和团队的实际需求,开发者可以灵活选择是否禁用 npm fund 提示。


相关链接
  • npm fund
  • npm 6.13.0
  • npm config——funding
  • What does ‘x packages are looking for funding’ mean when running npm install?
  • npm cli document

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/61447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大模型推理】vLLM 源码学习

强烈推荐 https://zhuanlan.zhihu.com/p/680153425 sequnceGroup 存储了相同的prompt对应的不同的sequence, 所以用字典存储 同一个Sequence可能占据多个逻辑Block, 所以在Sequence 中用列表存储 同一个block 要维护tokens_id 列表, 需要添加操作。 还需要判断blo…

核心速览12

研究背景 研究问题:这篇文章探讨了多模态人工智能(Agent AI)系统在理解和响应视觉和语言输入方面的潜力,特别是在物理和虚拟环境中的应用。Agent AI旨在通过感知和行动来增强人工智能系统的交互性和适应性。研究难点:…

【pyspark学习从入门到精通14】MLlib_1

目录 包的概览 加载和转换数据 在前文中,我们学习了如何为建模准备数据。在本文中,我们将实际使用这些知识,使用 PySpark 的 MLlib 包构建一个分类模型。 MLlib 代表机器学习库。尽管 MLlib 现在处于维护模式,即它不再积极开发…

从 IDC 到云原生:稳定性提升 100%,成本下降 50%,热联集团的数字化转型与未来展望

作者:金峰(项良)、朱永林、赵世振(寰奕) 公司简介 杭州热联集团股份有限公司成立于 1997 年 10 月,是隶属杭州市实业投资集团的国有控股公司。公司专业从事国际、国内钢铁贸易黑色大宗商品及产业服务&…

若依springboot 删除一直转 问题处理

src\main\resources\static\ruoyi\js\ry-ui.js submit方法1578行添加 $.operate.successCallback(result); 在线体验 admin/admin123陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。 演示地址:http://ruoyi.vip 文档地址…

面向未来的智能视觉参考设计与汽车架构,思尔芯提供基于Arm技术的创新方案

引言: 随着科技的飞速发展,智能视觉IoT已成为科技领域的热门话题,为智能家居、智慧城市等领域带来新机遇。然而,物联网市场的碎片化特性对智能视觉芯片设计构成挑战。同时,汽车行业正经历技术驱动的变革,软…

Multiple instance learning with graph neural networks文献笔记

基本信息 文章链接:[1906.04881] Multiple instance learning with graph neural networks 将每个包视为一个图,利用GNN学习包的嵌入,以探索包中实例之间有用的结构信息。最终的图表示被送入分类器进行标签预测。 具体方法 输入&#xff…

Elasticsearch是如何实现Master选举的?

大家好,我是锋哥。今天分享关于【Elasticsearch是如何实现Master选举的?】面试题。希望对大家有帮助; Elasticsearch是如何实现Master选举的? Elasticsearch 使用 Zen Discovery 插件(在较新的版本中是基于 Zen2&…

WEB-通用漏洞SQL注入CTF二次堆叠DNS带外

知识点: 1、数据库堆叠注入 根据数据库类型决定是否支持多条语句执行 数据库支持多条语句执行就是堆叠,如: 2、数据库二次注入 应用功能逻辑涉及上导致的先写入后组合的注入 3、数据库Dnslog注入 解决不回显(反向连接&#…

上生产时连接mysql数据库总是被拒绝

背景: 本地项目连接数据正常 测试环境也正常 到生产上就一直报错 且生产上使用mysql连接工具可以正常连接 报错信息:Connections refused: connect 调查: 数据库版本: 本地 mysql5.7.24 测试 8.3 生产5.7.36 连接驱动&#xf…

20241121买深圳保障房还是租保租房小思考?

1. 我的买深圳保障房或租保租房的出发点? 我的需求:主要是小孩读书 如果买深圳保障房例如人才房和安居房,会有购房合同,则读书积分等同有红本积分,相当于可以选择一些不错的公办学校 如果租保租房,由于查…

鸿蒙生态崛起

1.鸿蒙生态:开发者的新蓝海 从开发者角度看,鸿蒙生态带来了巨大机遇。其分布式能力实现了不同设备间的无缝体验,如多屏协同,让应用能跨手机、平板、智能穿戴和车载设备流畅运行。开发工具也有显著提升,方舟编译器等极大…

使用Python3实现Gitee码云自动化发布

仓库信息 https://gitee.com/liumou_site/ip 实现代码 import osimport requests from loguru import loggerdef gitee(ver, message, prerelease: bool False):"""在 Gitee 上创建发布版本:param ver: 版本号:param message: 发布信息:param prerelease: 是…

第75期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

常见网络厂商设备默认用户名/密码大全

常见网络厂商的默认用户名/密码 01 思科 (Cisco) 设备类型:路由器、交换机、防火墙、无线控制器 默认用户名:cisco 默认密码:cisco 设备类型:网管型交换机 默认用户名:admin 默认密码:admin 02 华…

DICOM图像解析:深入解析DICOM格式文件的高效读取与处理

引言 在医学影像领域,DICOM(Digital Imaging and Communications in Medicine)标准已成为信息交换和存储的核心规范。掌握DICOM文件的读取与解析,对于开发医学影像处理软件至关重要。本文将系统地解析DICOM文件的结构、关键概念,并提供高效的读取与显示方法,旨在为开发者…

例题10-4 冒泡排序 字符串排序

void SortString(char str[][MAX_LEN], int n) {int i,j;char temp[MAX_LEN];for(i0;i<n-1;i){for(ji1;j<n;j){if(strcmp(str[i],str[j])<0) {strcpy(temp,str[i]);strcpy(str[i],str[j]);strcpy(str[j],temp);}}} } //升序排列 和 降序排列可能不只是 判断条件…

嵌入式硬件电子电路设计(六)LDO低压差线性稳压器全面详解

引言&#xff1a; LDO&#xff08;Low Dropout Regulator&#xff0c;低压差线性稳压器&#xff09;是一种常用的电源管理组件&#xff0c;用于提供稳定的输出电压&#xff0c;同时允许较小的输入电压与输出电压之间的差值。LDO广泛应用于各种电子设备中&#xff0c;特别是在对…

STM32H7开发笔记(2)——H7外设之多路定时器中断

STM32H7开发笔记&#xff08;2&#xff09;——H7外设之多路定时器中断 文章目录 STM32H7开发笔记&#xff08;2&#xff09;——H7外设之多路定时器中断0.引言1.CubeMX配置2.软件编写 0.引言 本文PC端采用Win11STM32CubeMX4.1.0.0Keil5.24.2的配置&#xff0c;硬件使用STM32H…

OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算

本文实现Python库d和OpenCV来实现眼部闭合检测&#xff0c;主要用于评估用户是否眨眼。 步骤一&#xff1a;导入必要的库和设置参数 首先&#xff0c;代码导入了必要的Python库&#xff0c;如dlib、OpenCV和scipy。通过argparse设置了输入视频和面部标记预测器的参数。 from…