浅谈nodejs与npm
(1)npm介绍
在正式介绍Node.js学习之前,我们先认识一下npm。
npm是什么东西?npm其实是Node.js的包管理工具(package manager)。
为啥需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码。如果我们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用,非常繁琐。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上,如果要使用,直接通过npm安装就可以直接用,不用管代码存在哪,应该从哪下载。举个例子:如果我们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错。

比如之前的swiper开发,需要引入jquery类型文件,因为swiper是基于jquery语法开发。普通方案需要挨个引入,有了npm即nodejs的包管理工具后,它会自己根据文件依赖安装相应文件。
场景:
当一个网站依赖的js代码越来越多,程序员发现这是一件很麻烦的事情:
去 jQuery 官网下载 jQuery
去 BootStrap 官网下载 BootStrap
去 Underscore 官网下载 Underscore
……
有些程序员就受不了了,于是npm就出来了,全称是 Node Package Manager 包管理工具。这一点和maven、gradle十分相似,只不过maven、gradle是用来管理java jar包的,而npm是用来管理js的。
NPM 的实现思路和maven、gradle是一样的:
    1、有一个远程代码仓库(registry),在里面存放所有需要被共享的js代码,每个js文件都有自己唯一标识。
    2、用户想使用某个js的时候,只需引用对应的标识,js文件会自动下载下来。
(2)nodejs
在Windows上安装时务必选择全部组件,包括勾选Add to Path。
安装完成后,在Windows环境下,请打开命令提示符,然后输入node -v,如果安装正常,你应该看到版本输出。
Node.js平台是在后端运行JavaScript代码,可以把它理解成PHP和java同等的后台开发语言。
Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O模型而得以轻量和高效,
非常适合在分布式设备上运行数据密集型的实时应用。
以上摘自百度百科,简单来说,Node.js很适合搭建轻量的服务器(应用),所以它又被人称为服务器语言,前端中的后端语言。node翻译过来是节点的意思,而node.js后面特地带了.js,就表示它与JavaScript有莫大的关系。 node.js是javascript的一种运行环境,是服务器端的javascript的解释器。
(3)npm与node关系
npm则是包含在node.js里面的一个包管理工具,就如同linux中的yum仓库,rpm包管理;如同python中的pip包管理工具一样。而这些包管理工具都是予以使用的人们方便,同时解决各种包依赖之间的关系的。 等下面演示后,就会知道有npm去解决项目及包之间的依赖关系是多么的便利,省去了人手上的多少心力。让开发人员专注于代码上。
既然npm是包管理工具,那么它自己也和node.js分开自成一个网站,在npm的网站上面,就如同github,其仓库中保管了N多的开源项目,有世界上众多开发者提供的项目。我们只需要在npm的网站上搜索相关的就可以找到,然后在线上下载也行,直接在自己的项目中使用命令行安装也行。
npm 由三个独立的部分组成:
- npm官方网站(仓库源)
 - 注册表(registry)(package.json)
 - 命令行工具 (CLI)
 
网站 是开发者查找包(package)、设置参数以及管理 npm 使用体验的主要途径。
注册表 是一个巨大的数据库,保存了每个包(package)的信息。
CLI 通过命令行或终端运行。开发者通过 CLI 与 npm 打交道。
(4)Node.js是什么
Node.js是一个Javascript运行环境(runtime environment),不是一个js文件,实质是对Chrome V8引擎进行了封装。Node.js 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python 等服务端语言平起平坐的脚本语言。
  [1]Node.js提供替代的API,使得V8在非浏览器环境下运行得更好。V8引擎执行Javascript的速度非常快,性能非常好。 
  [2]Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。
chrome浏览器和Node.js在解析javascript都使用了v8引擎:


(5)npm与nodejs发展
npm作者已经将npm开发完成,于是发邮件通知 jQuery、Bootstrap、Underscore 作者,希望他们把 jquery、bootstrap 、 underscore 放到npm远程仓库,但是没有收到回应,于是npm的发展遇到了瓶颈。
    Node.js作者也将Node.js开发完成,但是 Node.js 缺少一个包管理器,于是他和 npm 的作者一拍即合、抱团取暖,最终 Node.js 内置了 npm。
后来的事情大家都知道,Node.js 火了。随着 Node.js 的火爆,大家开始用 npm 来共享 JS 代码了,于是 jQuery 作者也将 jQuery 发布到 npm 了。所以现在,你可以使用 npm install jquery 来下载 jQuery 代码。现在用 npm 来分享代码已经成了前端的标配。
(6)node.js和npm的安装
npm由于内置在node.js中,所以就一并安装了。有时候我们只想单独安装npm,不想安装node.js,这种目前不支持。
.
浅谈nodejs与npm的更多相关文章
- 浅谈Nodejs应用的主文件index.js的组成部分
		
前言 Node妹子的问世,着实让我们前端攻城狮兴奋了一把,尤其本屌听说Javascript可以写服务端后,兴奋的像是看到了二次元萝莉的胖子...(●'◡'●).呃哼...YY先到这里,原谅本屌是个二次 ...
 - 浅谈nodejs和php
		
现在,Web开发公司和开发人员可以选择多种技术栈来构建Web应用程序.早期网络发展,不同的技术被用于前端和后端开发.但是,随着Node.js的发布,布局发生了变化,因为它允许开发人员使用 JavaSc ...
 - 浅谈nodejs中HTTP模块应用
		
这里给大家分享下后端人员如果利用nodejs对数据的一些处理情况 适用于初学者使用 大牛勿喷 给大家分享下主要后端思想部分代码,前端部分就不展示了 const http = require(&quo ...
 - 浅谈NodeJs的模块机制
		
J历史 我们都知道,js在刚被创建的时候,只是为了在网页上写一些小脚本而已,比如网页特效,表单验证等等,创立者也许没觉悟到以后的js会发展到如此规模.这是web1.0时代. 在web 2.0时代,各种 ...
 - 浅谈NodeJS多进程服务架构基本原理
		
阅读目录 一:nodejs进程进化及多进程架构原理 二:node中child_process模块实现多进程 三:父子进程间如何通信? 四:理解cluster集群 回到顶部 一:nodejs进程进化及多 ...
 - 60.浅谈nodejs中的Crypto模块
		
转自:https://www.cnblogs.com/c-and-unity/articles/4552059.html node.js的crypto在0.8版本并没有改版多少,这个模块的主要功能是加 ...
 - 【前端知识体系-NodeJS相关】浅谈NodeJS中间件
		
1. 中间件到底是个什么东西呢? [!NOTE] 中间件其是一个函数,在响应发送之前对请求进行一些操作 function middleware(req,res,next){ // 做该干的事 // 做 ...
 - 浅谈前后端分离与实践 之 nodejs 中间层服务(二)
		
一.背景 书接上文,浅谈前后端分离与实践(一) 我们用mock服务器搭建起来了自己的前端数据模拟服务,前后端开发过程中只需定义好接口规范,便可以相互进行各自的开发任务.联调的时候,按照之前定义的开发规 ...
 - 浅谈Cordova优缺点与环境部署(转载)
		
浅谈Cordova优缺点与环境部署 作者:苏华杰 简介 Cordova是一个用基于HTML.CSS和JavaScript的,用于创建跨平台移动应用程序的快速开发平台.它使开发者能够利用iPhone.A ...
 
随机推荐
- JS按字节截取字符长度实例2
			
/* * param str 要截取的字符串 * param L 要截取的字节长度,注意是字节不是字符,一个汉字两个字节 * return 截取后的字符串 */ function cutStr(str ...
 - logging日志类
			
#! /usr/bin/env python #coding=utf-8 import logging,os class Logger: def __init__(self, path,clevel ...
 - 51nod 1069【思维】
			
具体思路来自相关讨论 给个不太严谨的证明思路: 第一步:证明路径可逆,也就是如果(a, b) -> (x, y)可行,则(x, y) - > (a, b)可行 这个比较直观,只需要分别由( ...
 - IT兄弟连 JavaWeb教程 请求重定向案例
			
Check2Servlet类与Output2Servlet类之间为请求转发关系.在web.xml文件中,为Check2Servlet映射的URL为"/check2",为Output ...
 - python 标准库大全
			
python 标准库 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 string ...
 - JAVA多线程(一) Thread & Runnable
			
githut代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service/ ...
 - MySql | 常用操作总结
			
创建数据库: CREATE DATABASE 数据库名; 删除数据库名: drop database <数据库名>; 选择数据库: use 数据库名; 创建数据表: CREATE TABL ...
 - JavaScript-获取当前元素的相关元素或节点--方法总结
			
1.获取当前元素中的第一个子节点 document.getElementById("uu").firstChild 2.获取当前元素中的第一个子元素 document.getEle ...
 - Linux修改文件的权限,拥有者,所属组
			
修改文件的权限,拥有者,所属组 1.设置文件的权限(chmod) ①方式一(建议使用这种方式) 命名:chomd 755 文件名 ②方式二 命名:chomd -R +x 文件名 2.设置文件的拥有者( ...
 - RHEL 6.5----heartbeat
			
主机名 IP 所需软件 master 192.168.30.130 heartbeat.httpd node-1 192.168.30.131 nfs node-2 192.168.30.1 ...