网上的 npm 教程主要都在讲怎么安装、配置和使用 npm ,却很少告诉新人「npm 是干什么的?」「为什么要使用 npm?」。今天我就来讲讲这个话题。本文目标读者是「不太了解 npm 的新人」,老司机请绕道。

社区
程序员自古以来就有社区文化。社区的意思是:拥有共同职业或兴趣的人们,自发组织在一起,通过分享信息和资源进行合作。虚拟社区的参与者经常会在线讨论相关话题,或访问某些网站。 前端程序员也有社区,世界上最大的前端社区应该就是 GitHub 了。前端通过 GitHub 来分享源代码(线上代码仓库),讨论问题(Issue 列表),收集学习资源和常去的网站(比如我收集的优质中文前端博客)。加入社区最大的好处之一是,你可以使用别人贡献的代码,你也可以贡献代码给别人用。

共享代码
前端是怎么共享代码的呢?在 GitHub 还没有兴起的年代,前端是通过网址来共享代码。比如你想使用 jQuery ,那么你点击 jQuery 网站上提供的链接就可以下 jQuery ,放到自己的网站上使用 。GItHub 兴起之后,社区中也有人使用 GitHub 的下载功能。

麻烦
当一个项目依赖的代码越来越多,程序员发现这是一件很麻烦的事情:
1.去 jQuery 官网下载 jQuery
2.去 BootStrap 官网下载 BootStrap
3.去 Underscore 官网下载 Underscore

有些程序员就受不鸟了,一个拥有三大美德的程序员 Isaac Z. Schlueter (以下简称 Isaaz)给出了一个解决方案:用一个工具把这些代码集中到一起来管理吧!这个工具就是他用 JavaScript (运行在 Node.js 上)写的 npm,全称是 Node Package Manager。

npm的思路大概是这样的:
1.买个服务器作为代码仓库(repository),在里面放所有需要被共享的代码
2.发邮件通知 jQuery 、Bootstrap 、Underscore 的作者使用 npm publish 把代码提交到 repository 上,分别取名 jquery、bootstrap 和 underscore(注意大小写)
3.社区里的其他人如果想使用这些代码,就把 jquery、bootstrap 和 underscore 写到 package.json 里,然后运行 npm install ,npm 就会帮他们下载代码
4.下载完的代码出现在 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。而 Isaaz 维护了一段时间后,辞职了,成立了一个公司专门维护 npm 的 repository,公司名叫做 npm 股份有限公司…谁说开源不能赚钱的呀???

社区的力量
回顾前端的发展史你会发现,一般都是社区里的某个人,发布了一份代码,最终影响前端接下来几年的走向。比如 jQuery,比如 node.js,比如 npm,其实其它语言也是这样的,所以说,社区的力量是巨大的。

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

  1. npm 是干什么的?

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

  2. npm是什么东西?npm是干什么的

    好多刚入门的前端人员有一个疑惑,我会使用npm了,但是不知道npm是什么东西,下面小编就来聊一聊 起初我们开发一个网站所需要的一些代码要从它的官网去下载,如果我们要开发的这个网站需要不同网站的代码,就 ...

  3. npm是干什么的?为什么要使用npm?(适合不太了解 npm 的新人阅读)

    网上的 npm 教程主要都在讲怎么安装.配置和使用 npm,却不告诉新人「为什么要使用 npm」.今天我就来讲讲这个话题. 本文目标读者是「不太了解 npm 的新人」 . 社区 程序员自古以来就有社区 ...

  4. npm 是干什么的?(八卦,非教程)

    网上的 npm 教程主要都在讲怎么安装.配置和使用 npm,却不告诉新人「为什么要使用 npm」.今天我就来讲讲这个话题. 本文目标读者是「不太了解 npm 的新人」,大神您别看了,不然又说我啰嗦了. ...

  5. npm 与 package.json 快速入门

    摘自  https://blog.csdn.net/u011240877/article/details/76582670#什么是-npm npm 是前端开发广泛使用的包管理工具,之前使用 Weex ...

  6. npm安装教程 集成npm webpack vue-cli

    一.使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理器. webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资 ...

  7. npm run dev/build/serve

    npm run dev/build/serve 1.ERR引发的思考 npm run dev npm ERR! missing script: devnpm ERR! A complete log o ...

  8. windows安装npm教程

    一 在使用之前,先类掌握3个东西,明白它们是用来干什么的: npm:  nodejs 下的包管理器. webpack: 它主要用途是通过CommonJS 的语法把所有浏览器端需要发布的静态资源作相应的 ...

  9. 阿里飞冰(Iceworks)入门和飞冰是干什么的

    前言: 昨天技术总监告诉我个框架(Iceworks),又名飞冰,是阿里旗下的一个开发工具.也没说具体这个东西能解决什么问题.所以我最终的目的是为了知道这个框架有什么用,是干什么的. 引用飞冰官网的一句 ...

最新文章

  1. 三调 图斑地类面积_国土三调攻坚冲刺,大疆无人机为调查举证提供加速度
  2. 嵌入式开发之信号采集同步---VSYNC和HSYNC的作用以及它们两者之间的关系
  3. Dropbox如何使用机器学习从数十亿图片中自动提取文字
  4. python语言单行注释符_Pyhton 单行、多行注释符号使用方法及规范
  5. SpringBoot 自动解析参数:HandlerMethodArgumentResolver
  6. Windows使用CLion 远程调试Linux程序
  7. android的文本框内容居中显示图片,DIV+CSS中让布局居中_背景图片居中_文字内容居中...
  8. 每天一个linux命令(28):tar命令
  9. Martix工作室考核题 —— 打印九九乘法表
  10. Python遍历破解FTP密码,并上传webshell
  11. matlab中运用demod解调程序,matlab调制解调源码有代码解释原理分析
  12. react调用api等待返回结果_React新Context API在前端状态管理的实践
  13. @Override错误
  14. 平板电脑办公软件_办公软件便签电脑版免费下载
  15. ps黑作坊终极天空大师 一键换天空终极版破解版扩展面板
  16. 找到Java中长整型(long)所能表示的最大素数: 9223372036854775783
  17. 使用M0 DesignStart 的样例SoC(example system) - 1 SoC组件
  18. Qt:使用版本控制系统
  19. DSP指纹识别系统硬件设计
  20. 打怪物小游戏,无聊打发时间

热门文章

  1. 数据库中的乐观锁与悲观锁
  2. JAVA计算机毕业设计早教课程管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  3. mavon-editor的使用 图片上传 标签转译
  4. 信息系统监理师题库_软考信息系统监理师模拟考试试题加答案(一)
  5. PostgreSQL 修改数据目录
  6. “信息安全科普系列”——病毒与恶意代码
  7. 洛谷-2151 [SDOI2009]HH去散步
  8. TensorRT升级错误,plugins/poly_layer.h:19:21: error: looser throw specifier for ‘virtual int nvinfer1::
  9. 【JAVA】使用流进行树形数据构造
  10. html怎么选择文件夹路径,js 选择本地文件夹路径