网上的 npm 教程主要都在讲怎么安装、配置和使用 npm,却不告诉新人「为什么要使用 npm」。今天我就来讲讲这个话题。

本文目标读者是「不太了解 npm 的新人」,大神您别看了,不然又说我啰嗦了 ��
社区

程序员自古以来就有社区文化:

社区的意思是:拥有共同职业或兴趣的人们,自发组织在一起,通过分享信息和资源进行合作。虚拟社区的参与者经常会在线讨论相关话题,或访问某些网站。
前端程序员也有社区,世界上最大的前端社区应该就是 GitHub 了。前端通过 GitHub 来

分享源代码(线上代码仓库)
讨论问题(Issue 列表)
收集学习资源和常去的网站(比如我收集的优质中文前端博客https://github.com/FrankFang/best-chinese-front-end-blogs)

加入社区最大的好处之一是,你可以使用别人贡献的代码,你也可以贡献代码给别人用。
共享代码

前端是怎么共享代码的呢?

在 GitHub 还没有兴起的年代,前端是通过网址来共享代码

比如你想使用 jQuery,那么你点击 jQuery 网站上提供的链接就可以下载 jQuery,放到自己的网站上使用

GItHub 兴起之后,社区中也有人使用 GitHub 的下载功能:

麻烦

当一个网站依赖的代码越来越多,程序员发现这是一件很麻烦的事情:

去 jQuery 官网下载 jQuery
去 BootStrap 官网下载 BootStrap
去 Underscore 官网下载 Underscore
……

有些程序员就受不鸟了,一个拥有三大美德的程序员 Isaac Z. Schlueter (以下简称 Isaaz)给出一个解决方案:用一个工具把这些代码集中到一起来管理吧!

这个工具就是他用 JavaScript (运行在 Node.js 上)写的 npm,全称是 Node Package Manager

具体步骤

NPM 的思路大概是这样的:

买个服务器作为代码仓库(registry),在里面放所有需要被共享的代码

发邮件通知 jQuery、Bootstrap、Underscore 作者使用 npm publish 把代码提交到 registry 上,分别取名 jquery、bootstrap 和 underscore(注意大小写)

社区里的其他人如果想使用这些代码,就把 jquery、bootstrap 和 underscore 写到 package.json 里,然后运行 npm install ,npm 就会帮他们下载代码

下载完的代码出现在 node_modules 目录里,可以随意使用了。

这些可以被使用的代码被叫做「包」(package),这就是 NPM 名字的由来:Node Package(包) Manager(管理器)。

发展

Isaaz 通知 jQuery 作者 John Resig,他会答应吗?这事儿不一定啊,对不对。

只有社区里的人都觉得 「npm 是个宝」的时候,John Resig 才会考虑使用 npm。

那么 npm 是怎么火的呢?

npm 的发展是跟 Node.js 的发展相辅相成的。

Node.js 是由一个在德国工作的美国程序员 Ryan Dahl 写的。他写了 Node.js,但是 Node.js 缺少一个包管理器,于是他和 npm 的作者一拍即合、抱团取暖,最终 Node.js 内置了 npm。

后来的事情大家都知道,Node.js 火了。

随着 Node.js 的火爆,大家开始用 npm 来共享 JS 代码了,于是 jQuery 作者也将 jQuery 发布到 npm 了。

所以现在,你可以使用 npm install jquery 来下载 jQuery 代码。

现在用 npm 来分享代码已经成了前端的标配。

后续

Node.js 目前由 Ryan Dahl 当时所在的公司 joyent 继续开发。Ryan Dahl 现在已经去研究 AI 和机器学习了,并且他把 Node.js 的维护权交给了 Isaaz。(我是不是也应该去研究 AI 和机器学习啊教练)

而 Isaaz 维护了一段时间后,辞职了,成立了一个公司专门维护 npm 的 registry,公司名叫做 npm 股份有限公司……谁说开源不能赚钱的~

社区的力量

回顾前端的发展是你会发现,都是社区里的某个人,发布了一份代码,最终影响前端几年的走向。比如 jQuery,比如 Node.js,比如 npm。(其实其他语言也是这样的)

所以,社区的力量是巨大的。
---------------------  
作者:love_pgme  
来源:CSDN  
原文:https://blog.csdn.net/love_pgme/article/details/83105192  
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/fengff/p/10725084.html

npm是什么,用来干嘛的相关推荐

  1. 难道只有我一个人想吐槽npm这种包管理方式么

    实在忍不住吐槽 说实话有强迫症的我忍了很久了,实在是忍不住写篇文章来吐槽一下. 标题可能说的有点大了,我要吐槽的是:我可能只需要某一个小小的功能模块A,结果模块A依赖B-F这5个模块,然后B又依赖这1 ...

  2. 「新手向」koa2从起步到填坑

    前传 出于兴趣最近开始研究koa2,由于之前有过一些express经验,以为koa还是很好上手的,但是用起来发现还是有些地方容易懵逼,因此整理此文,希望能够帮助到一些新人. 如果你不懂javascri ...

  3. 一、win10环境下,appium和python3的安装和配置

    环境:win10,py3.6 需要安装 :node.js,JDK,SDK,Appium及python相关库 1. 下载node.js a. 官网:https://nodejs.org/en/downl ...

  4. 【前端工程化】配置package.json中scripts命令脚本,新手必学

    每日鸡汤:你总要努力追上那个曾经被赋予众望的自己吧 目录 前言 一.运行npm run 命令之后会干啥? 1. scripts里面写啥 2. node_modules/.bin 二进制可执行文件 二. ...

  5. Npm 5 package locks

    上一篇文章中提到了几个前端界的版本大佬,这不,上个月 Node 又发布了 8.0 版本. Node 8 这次升级有哪些令人眼前一亮的新特性? 新增了 Node.js API (N-API) 新增了 u ...

  6. 聊一聊工作中如何优雅的通过TDD方式来维护一个高质量的NPM包

    背景 最近一直在采用TDD(测试驱动开发)的方式来维护公司内部的一套通用业务逻辑. 既然是应用到公司实际项目中的,那就不能随随便便搭个脚手架来完成了. 调研过程中,发现TypeScript libra ...

  7. 发布一个持续集成的npm包并加上装逼小icon

    前言 随着入坑时间的增长,很多小伙伴在使用第三方轮子时不满足于下载xxx.js,script标签引入xxx.js,然后使用轮子的原始方式.想要高大上一点,于是小伙伴们跟npm邂逅了.后来有的小伙伴又想 ...

  8. cnpm与npm指定有什么区别?

    CNPM跟NPM用法完全一致,只是在执行命令时将故宫改为CNPM. 因为故宫安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果故宫的服务器在中国就好了,所以我们乐于分享的淘宝团队干了这事来自 ...

  9. Node.js 之 新手安装详解 及 npm 配置说明

    简介   Node.js 是一个基于Chrome V8 的 JavaScript运行时的平台,可轻松构建快速,可扩展的网络应用程序. Node.js使用事件驱动的非阻塞I/O模型,使其轻量级和高效,非 ...

  10. npm依赖文件package.json中^和~的含义

    想知道'^'是干嘛的,就要了解npm的语义版本控制.如果 Node.js 软件包中有一件很棒的事情,那就是它们都同意使用语义版本控制作为版本编号.语义版本控制的概念很简单:所有的版本都有 3 个数字: ...

最新文章

  1. Lua table笔记
  2. TeX 家族(TeX, pdfTeX, XeTeX, LuaTeX, LaTeX, pdfLaTeX, XeLaTeX …)
  3. 主流TTLCMOS电平介绍
  4. 记录之使用3080ti运行tensorflow-gpu=1.x版本的源码
  5. Spring简介-Spring的优势
  6. N个数中选择M个数的组合(1MN)
  7. ad中pcb双面板怎么设置_PCB的设计规则和加工要求参考
  8. c++ 纯虚函数导出
  9. Spark在文本统计中的简单应用
  10. 软件测试工程师的核心竞争力是什么
  11. python socket-tcp逻辑
  12. 判断ios系统、qq浏览器,iosqq内置浏览器,微信内置浏览器
  13. redis客户端 predis与phpredis 比较
  14. div在不固定高度的情况下垂直或者水平居中
  15. 五万块钱买什么车好_5万元以下新车5万左右买什么车好
  16. 解决各种中文乱码的方法
  17. 【Oracle 12c Flex Cluster专题】—节点角色转换
  18. 我在华为OD的753天(已完结)
  19. SQL Server 2008 Integration Services 用代理加入job的例子
  20. 裁员滚滚,这个冬天有点冷 | 程序员有话说

热门文章

  1. 2018辛苦一年了,程序员这样跟大boss谈2019加薪,谈薪杯具变喜剧
  2. linux进阶之Tomcat服务篇
  3. 数据是如何从浏览器传输到服务器
  4. Java 爬虫简单起步
  5. 「LibreOJ β Round #4」多项式 (广义欧拉数论定理)
  6. 使用AsyncTask类实现简单的异步处理操作
  7. 盘点前 10 名的免费跨浏览器测试工具
  8. 关于C#窗体程序dataGridView控件的用法
  9. ASP.NET的安全性
  10. SHA1withRSA加签名和验签名