安装Node.js和npm
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 Node.js 的包管理器 npm,是全球最大的开源库生态系统。
安装Node.js
首先,从Node.js官网下载对应平台的安装程序,网速慢的童鞋请移步国内镜像。
在Windows上安装时务必选择全部组件,包括勾选Add to Path
,macOS上可以使用brew
命令进行安装即可。
安装完成后,输入node -v
查看版本号。
安装npm
我们为什么需要npm呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码。如果我们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用,非常繁琐。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上,如果要使用,直接通过npm安装就可以直接用,不用管代码存在哪,应该从哪下载。
更重要的是,如果我们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错。
npm已经在Node.js安装的时候顺带装好了,使用npm -v
查看版本号。
npm更新
可以使用npm update <name>
对单个包进行升级,版本大于 2.6.1
则可以使用npm install
进行升级。
有时候使用npm install
并不能正常升级,我们还可以使用npm outdated
查看哪些包有更新,然后将带待更新的包进行更新。
npm-check是用来检查npm依赖包是否有更新,错误以及不在使用的,我们也可以使用npm-check进行包的更新。 安装npm-check:
1
$ npm install npm-check
检查npm包的状态:
1
$ npm-check -u
那么npm install
和npm update
有什么区别呢,简而言之就是除了在package.json中处理依赖关系之外,npm install的功能更多。stackoverflow上的问题npm install vs. update - what’s the difference?有详细的对比,部分原文如下:
Why use npm install at all?
Because
npm install
does more when you look besides handling your dependencies inpackage.json
. As you can see in npm install you can …
- manually install node-modules
- set them as global (which puts them in the shell’s
PATH
) usingnpm install -g <name>
- install certain versions described by git tags
- install from a git url
- force a reinstall with
--force
本地安装与全局安装的区别
npm的包安装分为本地安装(local)、全局安装(global)两种,从命令来看,差别只是有没有-g
而已,比如之前的npm-check
1
2
$ npm install npm-check # 本地安装
$ npm install -g npm-check # 全局安装
这两种安装方式有什么区别呢?从npm官方文档的说明来看,主要区别在于:
本地安装
- 将安装包放在 ./node_modules 下(运行npm时所在的目录)
- 本地安装后可以直接通过require()的方式引入项目中node_modules目录下的模块
全局安装
- 将安装包放在 /usr/local 下
- 全局安装后可以供命令行(command line)使用,用户可以在命令行中直接运行该组件包支持的命令
为什么全局安装还要本地安装?
每一次的更新可能带来不一样的功能,在多人合作、发布模块到npmjs社区、上传到github给其他人使用时,保留模块的版本信息可用于下载指定的版本号显得特别重要。 本地安装可以让每个项目拥有独立的包,不受全局包的影响,方便项目的移动、复制、打包等,保证不同版本包之间的相互依赖,这些优点是全局安装难以做到的。 另外,据node团队介绍,本地安装包对于项目的加载会更快。
相关问题
npm install:no such file or directory
重新安装一次node之后,执行npm install命令时,报错如下:
1
2
3
4
5
6
7
8
9
npm WARN saveError ENOENT: no such file or directory, open '/Users/username/package.json'
npm WARN enoent ENOENT: no such file or directory, open '/Users/username/package.json'
npm WARN username No description
npm WARN username No repository field.
npm WARN username No README data
npm WARN username No license field.
up to date in 2.522s
found 0 vulnerabilities
根据提示,出错的原因是缺少 package.json
这个文件,解决方法如下:
初始化项目:
1
$ npm init -f
-f
表示force的意思,不加这个,npm会让你输入一堆信息,比如name、version之类,如果只是做做实验小demo,直接-f
,npm帮你初始化package.json,并填充各种默认值,省事。
安装依赖:
1
$ npm install formidable --save
--save
表示将安装的包加入依赖列表的意思,可以看下package.json 里的dependencies
字段。后面再运行 npm install
,就会把所有依赖安装下来。如果不加--save
,什么都不会安装。
参考资料:
npm install vs. update - what’s the difference?