“无关紧要”的小知识点:“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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux从0到1——shell编程7

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

数据科学与SQL:组距分组分析 | 区间分布问题

目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 绝对值分布分析也可以理解为组距分组分析。对于某个指标而言,一个记录对应的指标值的绝对值,肯定落在所有指标值的绝对值的最小值和最大值构成的区间内,根据一定的算法&#x…

大数据调度组件之Apache DolphinScheduler

Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。 主要特性 易于部署,提供四种部署方式,包括Standalone、Cluster、Docker和…

使用 前端技术 创建 QR 码生成器 API1

前言 QR码(Quick Response Code)是一种二维码,于1994年开发。它能快速存储和识别数据,包含黑白方块图案,常用于扫描获取信息。QR码具有高容错性和快速读取的优点,广泛应用于广告、支付、物流等领域。通过扫…

Hash table类算法【leetcode】

哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素 那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。 例如要查询一个名字是否在这所学校里。 要枚举的话时间复杂度是O(n),但如果使用哈希…

UI自动化测试中公认最佳的设计模式-POM

一、概念 什么是POM? POM是PageObjectModule(页面对象模式)的缩写,其目的是为了Web UI测试创建对象库。在这种模式下,应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元…

Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?

大家好,我是锋哥。今天分享关于【Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?】面试题。希望对大家有帮助; Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的? 100…

Python数据结构day2

一、链表 1.1目的 解决顺序表存储数据有上限,并且插入和删除操作效率低的问题 1.2概念 链表:链式存储的线性表,使用随机物理内存存储逻辑上连续的数据 链表的组成:由一个个结点组成 结点:由数据域和链接域组成&a…

【经纬度转地址实现方案】根据给定的经纬度,查询对应城市,通过建立经纬度geohash-行政区映射表,实现快速查询

文章目录 背景目标方案设计:表结构设计:方案实现1.高德API获取行政区边界点2.外包矩形中心作为中心点3.坐标点经纬度转换为geohash 测试建表语句测试造数测试用例测试结果 总结总结 背景 最近遇到一个需求,需要查询给定的经纬度坐标点&#…

解锁业务成功:大数据和 AI 如何协作以释放战略洞察

在当今这个数据主导的时代,大数据与AI的协同作用对于寻求竞争优势的组织而言愈发关键。大数据以其庞大的数据量、多样化的数据类型以及高速的数据生成能力,为AI算法提供了丰富的原材料,助力其挖掘出有价值的洞见,推动明智决策的制…

LINUX系统编程之——环境变量

目录 环境变量 1、基本概念 2、查看环境变量的方法 三、查看PATH环境变量的內容 1)不带路径也能运行的自己的程序 a、将自己的程序直接添加到PATH指定的路径下 b、将程序所在的路径添加到PATH环境中 四、环境变量与本地变量 1、本地变量创建 2、环境变量创…

QT:QListView实现table自定义代理

介绍 QListVIew有两种切换形式,QListView::IconMode和QListView::ListMode,通过setViewMode()进行设置切换。因为QListView可以像QTreeView一样显示树形结构,也可以分成多列。这次目标是将ListView的ListMode形态显示为table。使用代理&…

IDEA2023 创建SpringBoot项目(一)

一、Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 二、快速开发 1.打开IDEA选择 File->New->Project 2、…

初级数据结构——树

目录 前言一、树的基本概念二、二叉树三、树的表示方法四、树的遍历树的代码模版五、经典例题[2236. 判断根结点是否等于子结点之和](https://leetcode.cn/problems/root-equals-sum-of-children/description/)代码题解 六、总结结语 前言 从这一期开始数据结构开始有那么一点…

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失 Addressable Play Mode Script加载模式 选择 Use Existiing Build 1.Unity 切换到 PC 平台,执行 Addressable Build 运行,加载 bundle 内的预制体 显示正常 2.Unit…

视频去重工具

视频去重工具 工具截图 下载 回复:“0028”,即可自动获取

javascrip页面交互

元素的三大系列 offset系列 offset初相识 offset系列属性 作用 element.offsetParent 返回作为该元素带有定位的父级元素,如果父级没有定位,则返回body element.offsetTop 返回元素相对于有定位父元素上方的偏移量 element.offsetLeft 返回元素…

win10中使用ffmpeg和MediaMTX 推流rtsp视频

在win10上测试下ffmpeg推流rtsp视频,需要同时用到流媒体服务器MediaMTX 。ffmpeg推流到流媒体服务器MediaMTX ,其他客户端从流媒体服务器拉流。 步骤如下: 1 下载MediaMTX github: Release v1.9.3 bluenviron/mediamtx GitHub​​​​​…

el-select 和el-tree二次封装

前言 本文章是本人在开发过程中&#xff0c;遇到使用树形数据&#xff0c;动态单选或多选的需求&#xff0c;element中没有这种组件&#xff0c;故自己封装一个&#xff0c;欢迎多多指教 开发环境&#xff1a;element-UI、vue2 组件效果 单选 多选 组件引用 <treeselec…

STM32-- keil常见报错与解决办法

调试问题 1. keil在线调试需要点击好几次运行才可以运行&#xff0c;要是直接下载程序直接就不运行。 解决&#xff1a;target里面的use microlib要勾选&#xff0c;因为使用了printf。 keil在线调试STM32&#xff0c;点三次运行才能跑到main的问题解决。 keil在线调试STM32…