原文网址:npm--包的命令(安装包/卸载包/发布包等)--使用/实例_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍npm的包相关的命令。
npm介绍
- npm 全称为 node package manager, 即 node的包管理器。
- npm 是 Node.js 官方提供的包管理工具,他已经成了 Node.js 包的标准发布平台,用于 Node.js 包的发布、传播、依赖控制。
- npm 提供了命令行工具,使你可以方便地下载、安装、升级、删除包,也可以让你作为开发者发布并维护包。
官网
安装包
用法
命令 |
作用 |
详述 |
npm install <pkg> //同义词:i, isntall, add |
安装pkg包 |
先下载pkg,然后下载pkg的packages.json里的dependencies、devDependencies等表示的依赖项。 如果执行命令时所在的路径里有packages.json,则会将此依赖加入到其dependencies。 |
npm install pkg1 pkg2 |
安装多个包 |
|
npm install git://github.com/package/path.git |
从git下载安装 |
|
npm install sax@latest |
指定版本号 |
默认安装最新版本,如果要安装模块的特定版本,可以在模块名后面加上 @ 和版本号。 |
参数
参数 |
说明 |
详述 |
-f/--force |
强制安装。 不管是否安装过都重新安装。 |
安装前,npm install 会先检查node_modules目录之中是否已经存在指定模块。如果存在,就不再重新安装了,即使远程仓库已经有了一个新版本,也是如此。 |
-g/--global |
全局安装 |
详见下方:“本地安装/全局安装” |
-P/--save-prod //原来:-S/--save |
模块名添加到生产阶段依赖: dependencies |
模块名添加到packages.json 文件的dependencies项。 如果执行命令时所在的路径里有packages.json,不指定此参数也会将此依赖加入到其dependencies。 |
-D/--save-dev |
模块名添加到开发阶段依赖:devDependencies |
模块名添加到packages.json 文件的devDependencies项。 |
-O|--save-optional |
模块名添加到 optionalDependencies |
模块名添加到packages.json 文件的optionalDependencies项。 //目前不知道这个的作用 |
-E/--save-exact |
精确安装指定版本的模块 |
用此选项后dependencies字段里每个模块版本号前面的^不见了。 |
--dry-run |
只运行命令,并不实际安装 |
本地安装/全局安装
如果你希望具备本地安装和全局安装功能,则需要在两个地方安装它或使用 npm link。
本地安装
命令:npm install <Module Name>
说明:
- 会将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
- 可以通过 require() 来引入本地安装的包。
全局安装
命令:npm install <package> -g
说明:
- 默认放到用户目录下。可以通过npm get prefix查看安装位置
默认位置linux: /usr/local windows: C:\Users\xxx\AppData\Roaming\npm - 可以直接在命令行里使用。
全局安装时安装到指定位置的方法
法1:修改配置
创建node_cache与node_global文件夹,然后设置 全局安装位置
npm set cache D:\ST\nodejs\node_cache
npm set prefix D:\ST\nodejs\node_global
法2:安装时指定位置
npm install --prefix ./install/here <package>
卸载包
命令 |
作用 |
描述 |
npm uninstall <pkg> |
卸载包 |
同义词:remove, rm, r, un, unlink npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|-D|--save-dev|-O|--save-optional] 参数的含义与npm install一致。 |
更新包
命令 |
作用 |
描述 |
npm update <pkg> [-g] |
更新包 |
npm update用的比较少,不如直接npm install 来的方便 |
查看包
命令 |
作用 |
描述 |
npm root [pkg] [-g] |
查看包安装路径 |
|
npm search <pkg> [-g] |
搜索包 |
|
npm list [pkg] [-g] |
列出包。同义词:list, la, ll 选项: parseable=true //目录的形式来展现当前安装的所有node包 |
例1:列出顶层所有全局安装过的包 npm list -g --depth=0 |
npm info [<pkg>] [-g] |
查看包信息。 |
例:npm info express [author] //后边可直接跟package.json的键 |
npm view <pkg> [<labelName>] [-g] |
查看包的package.json。同义词:v 指定labelName可查看标签内容。 |
查看thrift所有版本: npm view thrift versions //或者npm view thrift@* version |
npm outdated [<pkg>] [-g] |
查看过时的包 |
发布包
命令 |
作用 |
描述 |
npm adduser |
获得用户名 |
要根据提示操作。可加--registry xxx 加快速度 |
npm whoami |
检测是否已取得账号 |
|
npm publish |
发布包 |
将包发布到npm。(稍后可在此网站看到自己的包) //不能发布npm中已经存在的包。 //npm publish --tag beta 可以添加tag。 //此时,可以用任意一台计算机npm install xxx 获得自己的包。 |
npm unpublish |
撤销发布 |
npm unpublish packageName/[<package>@<version>] --force //只有在发包的24小时内才允许撤销发布的包 //即使撤销了发布的包,发布时也不能再和被撤销的包的名称和版本重复了 |
关联包
命令
命令 | 作用 | 描述 |
npm link |
创建本地包与全局包链接 | 将全局的包链接到本地 全局模式安装的包不能直接通过 require 使用,但通过 npm link 命令可以打破这一限制。 示例:npm install -g express 安装 express,在express包目录下运行命令: npm link express ./node_modules/express -> /user/local/lib/node_modules/express 此时,在 node_modules 子目录中发现一个指向安装到全局的包的符号链接。 将本地的包链接到全局 使用方法:在包目录(package.json 所在目录)中运行 npm link 命令。如果我们要开发一个包,利用这种方法可以非常方便地在不同的工程间进行测试。 如果在outer 包目录(此包有package.json)下面有两个包package1 和package2,在package2 目录下执行 npm link命令,则会link outer 这个包 , 而不是package2:heavy_exclamation_mark: (它会link最外层包) 解决办法,先把最外层的package.json改为 package.json-xxx, 然后在内层包进行npm link, 然后再改回原来名字。如果link有改动,需要重新npm start.否则缓存的是原来的文件 (或者尝试先将 import 语句注释掉,然后再import来解决) |
npm unlink | 解除关联 | 解除项目与模块的依赖:在项目目录下执行npm unlink packageName 全局环境移除allenModule95模块链接:在该模块目录下执行npm unlink allenModule95即可 |
实例
自己开发一个依赖包,在多个项目中使用它,可直接发布到官网,但修改会非常麻烦,且不利于在多个项目中使用。可使用npm link解决。本处假设我们开发一个名为allenModule95的依赖包。
不使用npm link时
1.在该依赖包下运行npm init命令,并编写index.js文件。
module.exports = {
name: "allenModule95Name",
sayHello: function(){
console.log("hello allenModule95");
}
}
2. myProject目录下编写demo.js文件
var myModule = require("allenModule95");
console.log(myModule.name);
myModule.sayHello();
3. 运行node demo //报错,allenModule95模块找不到,因为此时的require搜寻目录没有包含此模块。
使用npm link
1. 切换到allenModule95目录下,执行npm link。作用:在全局环境下,生成一个符号链接文件,该文件的名字就是package.json文件中指定的模块名,同时我们对此模块的修改会实时反馈在全局目录下。
2. 切换到myProject目录下,执行npm link allenModule95。作用:将自定义的模块与此项目连接起来。
3. 执行:node demo //成功打印出如下内容
allenModule95
hello allenModule95
总结
- 如此,我们可以在任何目录下使用该模块,并且一处修改,处处改变,节省了同步依赖包的步骤。
- 如果想解除项目与模块的依赖则可以在项目目录下执行npm unlink allenModule95即可。
- 如果想要从全局环境移除allenModule95模块链接,则可以在该模块目录下执行npm unlink allenModule95即可。