1 npm是什么

npm是js的包管理工具,它由三个部分组成:

npm网站

  • npm官网上可以查找包,查看包信息。

注册中心

  • 存放js依赖包,我们可以将自己的包贡献其中,或者在注册中心下载依赖。

命令行工具npm-cli

  • 开发者运行npm命令的工具

2 package

npm package,也就是我们通常说的包,npm是包管理工具,那什么是包呢?npm包指的是由package.json描述的文件或目录。可以是如下任何一种形式

  • a) 一个包含package.json的文件夹
  • b) 一个包含a的gzipped tarball
  • c) 解析为b的一个URL
  • d) 和c一起发布到注册中心的
  • A <name>@<version> that is published on the registry with (c).
  • A <name>@<tag> that points to (d).
  • A <name> that has a latest tag satisfying (e).
  • A git url that, when cloned, results in (a).

3 modules

一个模块是指,在node_modules路径下的文件或目录,这个文件或目录可以用Node.js的require()函数加载。

为了能够被Node.js的require()函数加载,module必须符合如下规定之一

  • 包含package.json的文件夹,且package.json中含有main字段。
  • 一个js文件

注意:只有包含package.json的module才称之为package。

4 scopes

scope相当于命名空间,在不同scope中可以有相同名称的package。

在package.json文件中列出的dependency,scoped packages以scope名称开始,scope名称以@开始,以/结束,比如

@npm/package-name
@npmcorp/package-name

公共包

任何人都可以下载public packages到自己的项目下面。

unscoped public packages存在于全局公共注册中心命名空间中。我们可以在package.json中直接引入它

package-name

scoped public packages属于某一个用户或组织,必须使用如下方式引入

@username/package-name
@org-name/package-name

私有包

私有包只允许特定组织或个人使用,我们平时几乎接触不到

5 从registry获取package

第一步 查询包

从npm网站查询包

npm装的包可以用yarn重新装吗 npm packages_依赖包

 

 

第二步 安装包

执行如下命令进行包的安装

npm install <package_name>
npm install @scope/package-name

执行命令后,会在当前路径下面创建一个node_modules路径,并下载包到这个路径下面

全局安装

上面的安装方式只是在当前路径下安装依赖包。npm可以配置一个全局目录,我们可以选择把包安装在全局目录中

npm install -g <package_name>

6 更新依赖

检查更新

D:\code\xxx> npm outdated
Package                        Depended by          Current    Wanted   Latest  Location
@ant-design/charts             pms-front             0.9.13    0.9.13    1.4.2  node_modules/@ant-design/charts  
@ant-design/icons              pms-front              2.1.1     2.1.1    4.7.0  node_modules/@ant-design/icons   
@antv/data-set                 pms-front             0.10.2    0.10.2   0.11.8  node_modules/@antv/data-set      
@antv/g6                       pms-front              3.8.5     3.8.5    4.7.4  node_modules/@antv/g6
@babel/runtime                 pms-front             7.18.3    7.19.0   7.19.0  node_modules/@babel/runtime

如果输出是空的,说明没有要更新的内容,否则,会提示你当前版本以及最新版本,可以自行决定是否需要更新。

更新

npm update

全局依赖的检查

npm outdated -g --depth=0

全局依赖的更新

npm update -g <package_name>
npm update -g

7 使用依赖

一旦我们在node_modules中安装了依赖包,我们就可以使用它了。

我们可以使用node中的require函数使用依赖包。

var lodash = require('lodash');
var output = lodash.without([1, 2, 3], 1);
console.log(output);

8 npm CLI命令大全

8.1 npm run xxx

 用于执行一个命令,具体命令再package.json中定义。

其运行原理:

以linux环境为例,每当执行npm run,就会自行创建一个bash,在这个bash里执行指定的脚本,因此只要bash里可以执行的命令,就可以写到npm脚本里面。比较特别的地方是,npm run新建的这个bash会将当前目录的node_modules/.bin子目录加到PATH变量中,执行结束后,再将PATH变量恢复原样。因此,node_modules/.bin下的脚本都可以直接用脚本名调用而不必加上路径。

8.2 npm ls --global --depth 0

列出全局安装的依赖