npm踩坑实录(或许还会更新)

发布于 2021-02-01  160 次阅读


因为要用nodejs整一些项目,因此开始尝试用npm进行包管理。上一次用node已经是一年前了,我的鱼之记忆已经全忘光了,所以这次踩坑就来记录记录吧。

npm是干什么的?

npm(全称 Node Package Manager,即“node包管理器”)是Node.js默认的、用JavaScript编写的软件包管理系统

npm可以管理本地项目的所需模块并自动维护依赖情况,也可以管理全局安装的JavaScript工具[11]

如果一个项目中存在package.json文件,那么用户可以直接使用npm install命令自动安装和维护当前项目所需的所有模块[12]。在package.json文件中,开发者可以指定每个依赖项的版本范围,这样既可以保证模块自动更新,又不会因为所需模块功能大幅变化导致项目出现问题[13]。开发者也可以选择将模块固定在某个版本之上[14]

npm的全局安装与本地安装

什么是全局安装?

全局安装方式是键入命令:npm install gulp -g 或 npm install gulp --global,其中参数-g的含义是代表安装到全局环境里面。

包安装在Node安装目录下的node_modules文件夹中,Windows一般在 \Users\用户名\AppData\Roaming\ 目录下,Linux如果是自行用源码安装则在自己安装的位置。

可以使用npm root -g查看全局安装目录。

全局安装的调用

将node写到环境变量中后,全局安装的包可以直接在命令行中使用

什么是局部安装?

npm可以以项目为单位进行包管理。

本地安装方式是键入命令:npm install gulp 或 npm install gulp --save-dev等。其中参数--save-dev的含义是代表把你的安装包信息写入package.json文件的devDependencies字段中,包安装在指定项目的node_modules文件夹下,即本地安装。

在每个node项目文件夹的根目录中,都有一个package.json,这个文件中记录了该项目的包和依赖。

本地安装的调用:

本地安装后可以直接通过require()的方式引入项目中node_modules目录下的模块,如下示例。直接引入模块。

两种方式的优缺点

本地安装可以针对不同项目,不同版本的模块进行分别管理,毕竟,每个模块也会依赖其他模块,因此在不同项目中保持模块的分离管理就十分重要。

当然,本地安装也会有浪费空间之类的缺点。

Linux npm 全局安装后:'command not found'

这主要是因为在Linux平台,大部分人从源码安装nodejs,但是并没有将node写入到环境变量中。仅仅使用了软连接,让命令行可以执行npm和node命令。

执行

echo $PATH

看到环境变量中没有node(忘记截图了)

于是修改 /etc/profile

vim /etc/profile

并在文件的最后加上:

export NODE_HOME=/data/node //你的nodejs安装路径
export PATH=$NODE_HOME/bin:$PATH

并使用

source /etc/profile

使得环境变量生效。

之后就可以在命令行中使用npm全局安装的包了。(比如说安装了express脚手架: express-generator 后,可以在命令行中用express命令)


你好哇!欢迎来到雷公马碎碎念的地方:)