Node.js和npm的安装及npm的简单使用

重装了一遍node和npm出现了一些问题,进行了简单的整理

Posted by Malcolm Suen on June 3, 2018

安装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 installnpm 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 in package.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) using npm 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?

npm install —— 从一个简单例子,看本地安装与全局安装的区别

npm install模块时 报错:not such file or directory。是何原因?