npm许可证检查

news/2024/11/15 6:07:22/

node开发做项目,很少有人去纯手工打造,大多是采用一些开源框架,还会使用前人做好的轮子,所以咱们的项目文件里,除了自己编写的js文件,还会带有一些拿来主义的npm模块,从其他开源发布网站上下载的js等文件也算在内吧。
我们作为开源软件的受益者,即使可能还不能算开源的贡献者,遵守开源软件许可证协议是最基本要求,也是道德底线。开源软件的许可有很多种,公认的可能都超过80种,比较常见的MIT,BSD,Apache,GPL,Mozilla等,有些是要求如果你的项目包含了使用了该许可的软件,那么你的项目也要开源,比如GPL许可,所以GPL也被称为带有传染性,如果你的项目现在不适合开源,不想开源,那么就不要在项目里包含GPL许可的软件,其他许可还好了,大多没有要求开源,你可以认为是比较友好和宽松,没有强制开源的要求。
如果项目可以开源,希望所有人都能受益,开源社区繁荣,项目开源并采用GPL许可也挺好,没有开源打算的,那从一开始构建项目,就要回避GPL的npm模块,如果需要一个有成熟的框架,不用手工重新发明轮子,那么应该在可选的范围里有意识筛去GPL的,选择对闭源友好的许可证的框架。
那怎么识别这些开源的许可呢?
1.下载前看,开源软件会在官网和软件介绍的醒目位置标识其使用的开源许可证。
2.已经下载到本地了的话,可以在其node_modules目录下的软件模块的文件夹下的package.json文件里也会在"license"字段标识其许可证。
3.之前没有太注意,正式发布前检查,这时项目可能已经有很多依赖包了,node_modules下可能有很多文件夹了,一一看来检查效率太低,这时推荐一个npm工具:license-report 推荐安装全局生效

npm install -g license-report

在项目目录下,执行

license-report --output=csv --csvHeaders > projnpmlics.csv

可以生成当前项目依赖包的许可证清单,这样你可以对依赖包的许可有了全面详细的报告。如果包含GPL许可的话,你的项目又不开源的话,建议换成其他能实现类似功能的模块或者干脆自己手写轮子吧。
违反许可证的要求,虽然项目能跑起来,但是会被开源社区唾弃,而这将成为开发人员身上难以洗刷的历史污点。


http://www.ppmy.cn/news/1451273.html

相关文章

去中心化自治组织(DAO)

文章目录 一、DAO (Decentralized Autonomous Organization) 去中心化自治组织 二、举例说明 1、例子1 2、例子2 总结 一、DAO (Decentralized Autonomous Organization) 去中心化自治组织 DAO是一种基于区块链平台上的组织结构,它通过智能合约来实现组织的…

数据结构---线性表(顺序表)附代码

目录: 数据结构相关概念 1、什么是数据结构? 2、为什么需要数据结构? 顺序表 1、顺序表的概念及结构 1.1 线性表 1.2 顺序表 2、顺序表分类 3、动态顺序表的实现 什么是数据结构?? 数据结构是由 “数据”和 …

小剧场短剧影视小程序源码_后端PHP

项目运行截图 源码贡献 https://githubs.xyz/boot?app42 部署说明 linux/win任选 PHP版本:7.3/7.2(测试时我用的7.2要安装sg扩展 ) 批量替换域名http://video.owoii.com更换为你的 批量替换域名http://120.79.77.163:1更换为你的 这两个…

Python | Leetcode Python题解之第63题不同路径II

题目: 题解: class Solution:def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:row len(obstacleGrid)col len(obstacleGrid[0])dp [[0]*col for _ in range(row)]for i in range(row):for j in range(col):if not obs…

postMessage与BroadcastChannel对比学习

介绍 BroadcastChannel:提供了一种简单的跨页面通信方式,即可以在同一个页面中的不同 iframe,也可以在不同的页面之间进行通信。最重要的是只能在同源页面之间进行通信 若一个页面创建多个相同名称的通道,他们之间不会通信关闭通…

Golang 设计模式(创建型)

文章目录 工厂模式工厂模式 - 线程安全原型模式建造者模式 工厂模式 工厂模式是一种创建型设计模式,旨在提供一种封装对象创建过程的方式,使得客户端代码不必直接依赖于具体的对象创建细节。在 Go 语言中,工厂模式通常通过接口和结构体组合来…

MATLAB数值类型

MATLAB 数值 MATLAB支持各种数字类,包括有符号和无符号整数以及单精度和双精度浮点数。默认情况下,MATLAB将所有数值存储为双精度浮点数。 您可以选择将任何数字或数字数组存储为整数或单精度数字。 所有数值类型都支持基本数组运算和数学运算。 转换…

大模型日报2024-05-03

大模型日报 2024-05-03 大模型资讯 马克扎克伯格宣布Meta发布Llama 3大型语言模型的重大AI新闻 摘要: Meta公司在周四发布了其Llama 3大型语言模型的首两个版本。该模型是Meta AI的动力核心,马克扎克伯格称其为“未来的...”。这一进展标志着Meta在人工智能领域的进…