你不知道的Nxx(🐂x)系列(1) - Npm - (Node Package Manager)node包管理工具的使用和安装

npm 常用的命令汇总

最近使用verdaccio搭建私有npm仓库,用到很多的npm命令,特别整理一下,方便后面使用,毕竟现在前端都使用npm或者yarn这种包管理工具,学习一下npm常用命令和基本原理很有必要…

npm(Node Package Managemer)

npm 是node的模块管理器。我们只要一行命令就可以安装别人写好的模块,它包括两层含义:

  • 基于Node.js开发的包的托管网站,模块登记和管理系统,regitry
  • cli命令行模块管理器
  • 安装nodejs自动安装npm

(1)npm

  • 基本操作
    1
    2
    3
    4
    5
    npm docs 包名 查看包的文档
    npm help #查看npm命令列表
    npm -l #查看各个命令的简单用法
    npm -v #查看npm版本
    npm config list -l # 查看npm配置

npm init

初始化生成一个package.json文件

1
npm init -y # 使用默认配置生成一个package文件

npm set

由于npm init里面有很多默认的设置,如果需要修改默认设置,这样以后初始化项目都使用配置的默认设置就可以使用npm set

1
npm set init-author-name 'uncle pis' # 修改package的作者姓名

npm install/install -f 普通安装包/强制安装

每个模块可以“全局安装”,也可以“本地安装”。

“全局安装”指的是将一个模块安装到系统目录中,各个项目都可以调用。一般来说,全局安装只适用于工具模块,比如eslint和gulp。
“本地安装”指的是将一个模块下载到当前项目的node_modules子目录,然后只有在项目目录之中,才能调用这个模块。

1
npm install <packageName>#安装模块到node_modules目录

执行install之前,会检查node_modules目录之中是否已经存在指定模块,存在不再重新安装,即使远程仓库发布了一个新的版本,也不会安装

希望一个模块无论是否安装过,npm都强制重新安装可以使用-f或者--force

  • 注意一下安装的时候,项目相关的要放在 -S下的dependency中,开发环境和工具相关的要放在-D的devDependency中

    npm install 默认会安装dependecy和devDependency的包,如果–production则会安装dependency而不会安装

1
2
3
4
5
6
7
8
npm install <packageName> --force #强制安装
npm i <packageName>#缩写
npm i <packageName>@<version range>#npm i npm@latest 指定版本
// “devDependencies”: These packages are only needed for development and testing.(这些包仅用于开发和测试)
npm i <packageName> -D # –save-dev: 模块名将被添加到devDependencies,可以简化为参数-D。
//“dependency”:These packages are required by your application in production.(这些软件包是生产中的应用程序需要的)
npm i <packageName> -S # –save:模块名将被添加到dependencies,可以简化为参数-S。
npm i <packageName> -g # 或者--global

如果你希望,所有模块都要强制重新安装,那就删除node_modules目录,重新执行npm install。

1
2
rm -rf node_modules
npm install

全局安装和局部安装的区别:

npm uninstall

1
2
npm uninstall [package name] #卸载本地模块
npm uninstall [package name] -g #卸载全局模块

npm update

它会先到远程仓库查询最新的版本,然后查询本地版本,如果本地版本不存在或者远程较新,就会更新安装

1
npm update <packageName> #更新已经安装的模块

npm查询服务(registry)

npm模块仓库提供一个查询服务叫做registry。例如npmjs.org提供的查询服务网址是 https://registry.npmjs.org/

  • 服务后面跟上模块名字就会得到一个json对象,里面是改模块所有的版本信息。比如,访问 https://registry.npmjs.org/react,就会看到 react 模块所有版本的信息。

  • 返回的json对象里面又一个dist.tarball属性,是该版本的压缩包地址。使用npm install或者npm update就是通过这个方式安装模块的

模块安装过程

1
2
3
4
1.发出npm install命令
2.npm向registry查询服务发送请求,查询模块压缩包的地址
3.下载压缩包,存放在本地的缓存目录
4.解压压缩包到当前目录的node_modules
  • 运行npm install只会检查本地的node_modules存不存在需要的包,不会检查缓存

    所以缓存里面有,但是node_modules里面没有,还是会从远程的npm仓库下载一次

查看npm源

1
npm config get registry

设置npm源

1
npm config set registry xxxxx

npm run

  • npm不仅可以用于模块管理,还可以用于执行脚本。package.json文件有一个scripts字段,可以用于指定脚本命令,供npm直接调用。
  • npm内置了两个命令简写,npm test等同于执行npm run test,npm start等同于执行npm run start。
  • 先运行npm run build-js,然后再运行npm run build-css,两个命令中间用&&连接。如果希望两个命令同时平行执行,它们中间可以用&连接
  • npm run命令还可以添加参数,如果要通过npm test命令,将参数传到mocha,则参数之前要加上两个连词线。

npm_arg

参考连接

阮一峰npm 模块安装机制简介
阮一峰 npm模块管理器

初到贵宝地,有钱的给个钱场,没钱的挤一挤给个钱场