理论篇:什么是NPM以及为什么NPM如此重要

📌 NPM,全称是 Node Package Manager,NodeJS 包管理工具

当我们开始现代化前端项目开发时,总是会被告知需要提前安装NodeJS,而且NodeJS软件包不仅仅会在我们的开发设备上安装NodeJS运行环境,同时会附带NPM工具。

对于前端开发者而言,NPM是一个极其重要的工具,至于什么是NPM,NPM能够做什么,NPM为什么极其重要等等问题,本文会通过通俗易懂的语言来完成解释。

什么是 Node Package

当我们开始软件项目开发时,总会需要一些通用的与业务无关的工具方法,比如时间处理工具、接口请求工具等等,这些工具方法是完全可以提供给所有开发者使用的。

于是,有人将这些工具函数、或者资源等文件,按照符合开发语言的规范组装成一个完成的资源包,其他开发者通过某些途径拿到资源包,并且根本不需要关心资源包里面的工具函数是怎么实现的,只需要通过对应语言的资源引入指令引入资源包,并且调用其工具函数即可。

在JavaScript相关项目的开发中,package是由package.json文件和一堆其他的源码文件组件。其中package.json文件是必不可少的,它包含了包的名称、版本、构建、测试、依赖包等信息,以及包源代码文件位置定义。

什么是NPM

通过上面我们了解到开发者之间可以通过包的形式共享代码,但是如何完成资源包的管理呢?说到资源包的管理,我们谈一谈为什么需要管理?

首先我们思考下面几个问题

  1. 当我需要包含某些功能的资源包时,我应该从哪儿找?
  2. 当我想给其他开发者分享我写的工具函数或者资源,我应该将它放在哪儿?
  3. 如果资源包有不同的版本,我应该如何判断应该用哪个版本?

对于所有的开发语言其实都会面临这些问题,一个方便实用的资源分享、管理平台是每个开发语言社区生态的基石。只有分享变得容易,开发者才更加愿意分享,喜欢分享的开发者越多,社区约活跃,遇到的问题可以找到成熟的解决方案,这样喜欢使用这个语言的人就会越多,然后更多的人会去参与分享。这是一个正反馈的循环,这种现象也被称为飞轮效应。而让这个轮子转起来的第一步就是一个成熟好用的包管理工具以及平台。

现在我们回到最初的问题:什么是NPM,NPM能够做什么?

NPM是JavaScript包管理工具,它方便开发者进行代码复用代码分析项目依赖包管理等。为了方便开发者之间共享JavaScript资源包,NPM官方提供了一个远程公共数据库平台:https://www.npmjs.com 。
NPM

JavaScript 开发者们可以在平台中搜索想要的资源包,同时也能够非常容易上传自己封装好的资源包。如果你也想向其他开发者共享你写的代码,后续我会输出一篇如何封装资源包以及上传到npm平台的教程。

其他选择

当我们真正的开始使用NPM进行JavaScript的依赖包的管理时你会发现,npm下载依赖包的速度非常感人,尤其是在中国。由于NPM官方数据库服务器在海外,JavaScript项目的依赖包整体动辄就1G+,所以中国开发者下载项目依赖包的时间会非常久。

不同的NPM下载地址

但是除了NPM官方提供的数据库,还有其他成熟的共享数据库可以使用,比如国内淘宝提供的NPM镜像数据库cnpm mirror。

下面列出常用的公开数据库地址

registry源地址
npm registry(默认)https://www.npmjs.com/
cnpm mirrorhttps://registry.npmmirror.com/
tencent mirrorhttp://mirrors.cloud.tencent.com/npm/
huaweicloud mirrorhttps://mirrors.huaweicloud.com/repository/npm/
yarn registryhttps://registry.yarnpkg.com/
nodejitsu registryhttps://registry.nodejitsu.com/

不同的包管理工具

  • npm

    npmNode Package Manager)是Node.js默认的包管理器,它与Node.js一起发布。npm的目标是帮助JavaScript开发人员轻松地分享和重用代码,它也是开发流行JavaScript库和应用程序的基础。

  • yarn

    **Yarn**是Facebook于2016年发布的一款JavaScript包管理器,旨在弥补npm在性能和安全性方面的一些缺点。Yarn引入了 “lockfile” 概念,保证了你每次安装的准确性,并使用并行下载来优化性能。此外,它也引入了工作区特性,便于大型项目的管理

  • pnpm

    pnpm 是另外一个JavaScript包管理器,它的主要卖点是它的高效性。pnpm 使用硬盘链接而不是复制来管理项目依赖,这可以极大地节省空间和安装时间。

关于这三个常用的包管理工具,后续会输出一篇包管理工具的发展历史和细节对比的文章。

思维发散

前面我说过,一个方便实用的资源分享、管理平台是每个开发语言社区生态的基石,所以目前市面上受欢迎的开发语言都提供了成熟的包管理工具及平台。当我们去学习一门新的开发语言时,能够理解为什么有各种不同的工具去安装依赖包。

JavaScriptnpm
JavaMaven / Gradle
Pythonpip / conda
Gogo modules
RustCargo

总结

有人说,互联网行业之所以蓬勃发展,少不了开发者的分享精神推动。无数的开源项目和资源包,免费的学习资源,让这个行业有源源不断的新鲜血液注入和活跃的思想碰撞。

希望开发者们都能够热爱coding,热爱分享~

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

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

相关文章

2. 创建型模式 - 抽象工厂模式

亦称: Abstract Factory 意图 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。 问题 假设你正在开发一款家具商店模拟器。 你的代码中包括一些类, 用于表示: 一系列相关产品&…

一套rk3588 rtsp服务器推流的 github 方案及记录 -03(完结)

opencv 解码记录 解码库使用的时候发现瑞芯微以前做过解码库对ffmpeg和gstreamer的支持 然后最近实在不想再调试Rtsp浪费时间了,就从这中间找了一个比较快的方案 ffmpeg 带硬解码库编译 编译流程参考文献 https://blog.csdn.net/T__zxt/article/details/12342435…

C++11特性:可调用对象以及包装器function的使用

在C中存在“可调用对象”这么一个概念。准确来说&#xff0c;可调用对象有如下几种定义&#xff1a; 是一个函数指针&#xff1a; int print(int a, double b) {cout << a << b << endl;return 0; } // 定义函数指针 int (*func)(int, double) &print…

LeetCode刷题--- 括号生成

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述递归递归、搜…

Nginx 实战闲谈第一讲:HTTP协议介绍

基本介绍 1.HTTP含义 HTTP 全称&#xff1a;Hyper Text Transfer Protocol 中文名&#xff1a;超文本传输协议 HTTP就是将用户的请求发送到服务器&#xff0c;将服务器请求到的内容传输回给浏览器&#xff0c;浏览器进行解析&#xff0c;解析后变成便于观看的页面。&#x…

vscode配置node.js调试环境

node.js基于VSCode的开发环境的搭建非常简单。 说明&#xff1a;本文的前置条件是已安装好node.js(具体安装不再赘述&#xff0c;如有需要可评论区留言)。 阅读本文可掌握&#xff1a; 方便地进行js单步调试&#xff1b;方便地查看内置的对象或属性&#xff1b; 安装插件 C…

java:获取线程的Id

JDK 19及以后版本&#xff0c;使用Thread的threadId()方法获取当前线程的Id&#xff08;identifier &#xff09;。这个Id是一个正的长整型&#xff0c;在线程创建的时候产生。这个Id是唯一的&#xff0c;并且在线程的生命周期期间保持不变。 JDK 19以前的版本&#xff0c;使用…

Unity中Shader平移矩阵

文章目录 前言方式一&#xff1a;对顶点本地空间下的坐标进行相加平移1、在属性面板定义一个四维变量记录在 xyz 上平移多少。2、在常量缓冲区进行申明3、在顶点着色器中&#xff0c;在进行其他坐标转化之前&#xff0c;对模型顶点本地空间下的坐标进行转化4、我们来看看效果 方…

Java:将字符串重复多次串接起来输出

String的函数public String repeat(int count)&#xff0c;可以将当前字符串重复count次串接起来输出。 如果字符串是空的&#xff0c;或者count的值是0&#xff0c;那么返回空字符串。 代码示例1&#xff1a; package com.thb;public class Test5 {public static void main(…

CVE-2022-22978 Spring Security越权访问漏洞

简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。 Spring Security底层实现为一条过滤器链&#xff0c;就是用户请求进来&#xff0c;判断有没有请求的权限&#xff0c;抛出异常&#xff0c;重定向跳转。 影响版本 S…

【教程】cocos2dx资源加密混淆方案详解

1,加密,采用blowfish或其他 2,自定是32个字符的混淆code 3,对文件做blowfish加密,入口文件加密前将混淆code按约定格式(自定义的文件头或文件尾部)写入到文件 4,遍历资源目录,对每个文件做md5混淆,混淆原始串“相对路径”“文件名”混淆code, 文件改名并且移动到资源目录根…

C#线程的定义和使用方法

引言 在C#编程语言中&#xff0c;线程是一种并发执行的机制&#xff0c;允许程序同时执行多个任务。线程的使用使得我们能够利用计算机的多核处理器&#xff0c;实现程序的并行执行&#xff0c;提高系统的性能和响应能力。本文将详细介绍C#中线程的定义和使用方法&#xff0c;涵…

大数据可视化BI分析工具Apache Superset结合内网穿透实现远程访问

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

Flask ImportError: DLL load failed: 找不到指定的模块。

一、anaconda环境 将anaconda3安装路径下DDL目录中的 libcrypto-1_1-x64.dll 和 libssl-1_1-x64.dll 拷贝到 虚拟环境目录下的DLL中 完美解决 成功了给个赞吧&#xff01;

三大主流前端框架介绍及选型

在前端项目中&#xff0c;可以借助某些框架&#xff08;如React、Vue、Angular等&#xff09;来实现组件化开发&#xff0c;使代码更容易复用。此时&#xff0c;一个网页不再是由一个个独立的HTML、CSS和JavaScript文件组成&#xff0c;而是按照组件的思想将网页划分成一个个组…

智能优化算法应用:基于未来搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于未来搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于未来搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.未来搜索算法4.实验参数设定5.算法结果6.…

Java:获取线程组的最大优先级

java.lang.ThreadGroup的getMaxPriority()函数返回该线程组的最大优先级。这个最大优先级就等于该线程组中新创建线程的最大优先级。 代码示例&#xff1a; package com.thb;public class Test5 {public static void main(String[] args) {ThreadGroup threadGroup Thread.c…

Unity | Shader基础知识(第八集:案例<漫反射材质球>)

目录 一、本节介绍 1 上集回顾 2 本节介绍 二、什么是漫反射材质球 三、 漫反射进化史 1 三种算法结果的区别 2 具体算法 2.1 兰伯特逐顶点算法 a.本小节使用的unity自带结构体。 b.兰伯特逐顶点算法公式 c.代码实现——兰伯特逐顶点算法 2.2 代码实现——兰伯特逐…

【C++】初识模板

本文目录 1. 泛型编程2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 3. 类模板3.1 类模板的定义格式3.2 类模板的实例化 1. 泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int&…

【控制器局域网】CAN报文学习笔记(四)之 字节排序、信号提取实例1

以下面的表格来表示字节顺序和位顺序&#xff0c;用红色表示高位MSB&#xff0c;蓝色表示低位LSB&#xff0c;绿色为LSB到MSB的过度 Bit oderMSB→→→→→→LSBByte oder\Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0MSBByte076543210↓Byte115141312111098↓Byte22322212019181716↓By…