npm 超详细使用教程

文章目录

  • 一、简介
  • 二、npm安装
  • [三、npm 的使用](#三、npm 的使用)
    • [3.1 npm初始化项目](#3.1 npm初始化项目)
    • [3.2 安装包](#3.2 安装包)
    • [3.3 安装不同版本包](#3.3 安装不同版本包)
    • [3.4 避免系统权限](#3.4 避免系统权限)
    • [3.5 更新包](#3.5 更新包)
    • [3.6 卸载包](#3.6 卸载包)
    • [3.7 执行脚本](#3.7 执行脚本)
    • [3.8 pre- 和 post- 脚本](#3.8 pre- 和 post- 脚本)
    • [3.9 npm link](#3.9 npm link)
    • [3.10 发布和卸载发布的包](#3.10 发布和卸载发布的包)
    • [3.11 使用npm版本控制](#3.11 使用npm版本控制)
    • [3.22 npm资源](#3.22 npm资源)
  • 四、总结

一、简介

npm,全名 node package manger。

npm 是Node的开放式模块登记和管理系统,是Node.js包的标准发布平台,用于Node.js包的发布、传播、依赖控制,网址:https://www.npmjs.com/

npm 提供了命令行工具,可以方便地下载、安装、升级、删除包,也可以让你作为开发者发布并维护包。

在本文中,我们将深入探讨npm的各个方面,从安装到高级用法,帮助读者从入门到精通npm的使用。

二、npm安装

npm 在按照 Node.js 时会连带被安装。但有可能不是最新版本,需要 npm install npm@latest -g 升级到最新版本。
命令

powershell 复制代码
# 查看 npm 命令列表
$ npm help
# 查看各个命令的简单用法
$ npm -l
# 查看 npm 的版本
$ npm -v
# 查看 npm 的配置
$ npm config list -l

三、npm 的使用

3.1 npm初始化项目

npm init 初始化 package.json 文件,用来初始化生成package.json文件。在这个过程中会向用户提问一系列问题,如果你觉得不用修改默认配置,一路回车就可以了。

如果使用了-f(代表force)、-y(代表yes),则跳过提问阶段,直接生成一个新的package.json文件。
npm set 设置环境变量:

powershell 复制代码
$ npm set init-author-name 'Your name'
$ npm set init-author-email 'Your email'
$ npm set init-author-url 'http://****.com'
$ npm set init-license 'MIT'

上面命令等于为npm init设置了默认值,以后执行npm init的时候,package.json的作者姓名、邮件、主页、许可证字段就会自动写入预设的值。这些信息会存放在用户主目录的~/.npmrc文件,使得用户不用每个项目都输入。如果某个项目有不同的设置,可以针对该项目运行npm config。

powershell 复制代码
$ npm set save-exact true

上面命令设置加入模块时,package.json将记录模块的确切版本,而不是一个可选的版本范围。
npm config

powershell 复制代码
$ npm config set prefix $dir

上面的命令将指定的$dir目录,设为模块的全局安装目录。如果当前有这个目录的写权限,那么运行npm install的时候,就不再需要sudo命令授权了。

powershell 复制代码
$ npm config set save-prefix ~

上面的命令使得npm install --save和npm install --save-dev安装新模块时,允许的版本范围从克拉符号(^)改成波浪号(~),即从允许小版本升级,变成只允许补丁包的升级。

powershell 复制代码
$ npm config set init.author.name $name
$ npm config set init.author.email $email

上面命令指定使用npm init时,生成的package.json文件的字段默认值。
npm info

npm info命令可以查看每个模块的具体信息

powershell 复制代码
$ npm info underscore
$ npm info underscore description
$ npm info underscore homepage
$ npm info underscore version

npm search :

npm search命令用于搜索npm仓库,它后面可以跟字符串,也可以跟正则表达式

powershell 复制代码
$ npm search <搜索词>

npm list

npm list命令以树型结构列出当前项目安装的所有模块,以及它们依赖的模块。

powershell 复制代码
npm list
npm list -global
npm list vue

加上global参数,会列出全局安装的模块。

3.2 安装包

Node模块采用npm install命令安装。

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

本地安装

powershell 复制代码
$ npm install <package name>

全局安装

powershell 复制代码
$ sudo npm install -global <package name>
$ sudo npm install -g <package name>

也支持直接输入Github代码库地址

powershell 复制代码
$ npm install git://github.com/package/path.git
$ npm install git://github.com/package/path.git#0.1.0

强制重新安装

powershell 复制代码
$ npm install <packageName> --force

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

powershell 复制代码
$ rm -rf node_modules
$ npm install

3.3 安装不同版本包

install 命令总是安装模块的最新版本,如果要安装模块的特定版本,可以在模块名后面加上@和版本号。

powershell 复制代码
$ npm install sax@latest
$ npm install sax@0.1.1
$ npm install sax@">=0.1.0 <0.2.0"

# 如果使用--save-exact参数,会在package.json文件指定安装模块的确切版本
$ npm install readable-stream --save --save-exact

$ npm install sax --save
$ npm install node-tap --save-dev
# 或者
$ npm install sax -S
$ npm install node-tap -D

# 如果要安装beta版本的模块,需要使用下面的命令
# 安装最新的beta版
$ npm install <module-name>@beta (latest beta)
# 安装指定的beta版
$ npm install <module-name>@1.3.1-beta.3

# npm install默认会安装dependencies字段和devDependencies字段中的所有模块,如果使用--production参数,可以只安装dependencies字段的模块
$ npm install --production
# 或者
$ NODE_ENV=production npm install

3.4 避免系统权限

默认情况下,Npm全局模块都安装在系统目录(比如/usr/local/lib/),普通用户没有写入权限,需要用到sudo命令。这不是很方便,我们可以在没有root权限的情况下,安装全局模块。

首先,在主目录下新建配置文件.npmrc,然后在该文件中将prefix变量定义到主目录下面。

powershell 复制代码
prefix = /home/yourUsername/npm

然后在主目录下新建npm子目录

powershell 复制代码
$ mkdir ~/npm

此后,全局安装的模块都会安装在这个子目录中,npm也会到~/npm/bin目录去寻找命令。

最后,将这个路径在.bash_profile文件(或.bashrc文件)中加入PATH变量。

powershell 复制代码
export PATH=~/npm/bin:$PATH

3.5 更新包

npm update命令可以更新本地安装的模块

powershell 复制代码
# 升级当前项目的指定模块
$ npm update [package name]
# 升级全局安装的模块
$ npm update -global [package name]

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

使用-S或--save参数,可以在安装的时候更新package.json里面模块的版本号。

注意,从npm v2.6.1开始,npm update只更新顶层模块,而不更新依赖的依赖,以前版本是递归更新的。如果想取到老版本的效果,要使用下面的命令。

powershell 复制代码
$ npm --depth 9999 update

3.6 卸载包

npm uninstall命令,卸载已安装的模块

powershell 复制代码
$ npm uninstall [package name]
# 卸载全局模块
$ npm uninstall [package name] -global

3.7 执行脚本

npm run

npm 不仅可以用于模块管理,还可以用于执行脚本。package.json 文件有一个 scripts 字段,可以用于指定脚本命令,供npm直接调用。

npm run 命令会自动在环境变量 $PATH 添加 node_modules/.bin 目录,所以 scripts 字段里面调用命令时不用加上路径,这就避免了全局安装 NPM 模块。

npm run 如果不加任何参数,直接运行,会列出 package.json 里面所有可以执行的脚本命令。

npm内置了两个命令简写,npm test 等同于执行 npm run test,npm start 等同于执行 npm run start。

powershell 复制代码
$ npm i eslint --save-dev

3.8 pre- 和 post- 脚本

npm run 为每条命令提供了 pre- 和 post- 两个钩子(hook)。以 npm run lint 为例,执行这条命令之前,npm会先查看有没有定义 prelint 和 postlint 两个钩子,如果有的话,就会先执行 npm run prelint,然后执行 npm run lint,最后执行npm run postlint。

就是将当前的目录临时的放到全局下。

开发 NPM 模块的时候,有时我们会希望,边开发边试用,比如本地调试的时候,require('myModule') 会自动加载本机开发中的模块。Node规定,使用一个模块时,需要将其安装到全局的或项目的 node_modules 目录之中。对于开发中的模块,解决方法就是在全局的 node_modules 目录之中,生成一个符号链接,指向模块的本地目录。

npm link 就能起到这个作用,会自动建立这个符号链接。

请设想这样一个场景,你开发了一个模块 myModule,目录为 src/myModule,你自己的项目 myProject 要用到这个模块,项目目录为 src/myProject。首先,在模块目录(src/myModule)下运行 npm link 命令。

powershell 复制代码
src/myModule$ npm link

上面的命令会在NPM的全局模块目录内,生成一个符号链接文件,该文件的名字就是 package.json 文件中指定的模块名。

powershell 复制代码
/path/to/global/node_modules/myModule -> src/myModule

这个时候,已经可以全局调用 myModule 模块了。但是,如果我们要让这个模块安装在项目内,还要进行下面的步骤。

切换到项目目录,再次运行 npm link 命令,并指定模块名。

powershell 复制代码
src/myProject$ npm link myModule

上面命令等同于生成了本地模块的符号链接。

powershell 复制代码
src/myProject/node_modules/myModule -> /path/to/global/node_modules/myModule
javascript 复制代码
然后,就可以在你的项目中,加载该模块了。
var myModule = require('myModule');

这样一来,myModule 的任何变化,都可以直接反映在 myProject 项目之中。但是,这样也出现了风险,任何在myProject目录中对myModule的修改,都会反映到模块的源码中。

如果你的项目不再需要该模块,可以在项目目录内使用 npm unlink 命令,删除符号链接。

powershell 复制代码
src/myProject$ npm unlink myModule

3.10 发布和卸载发布的包

npm publish用于将当前模块发布到http://npmjs.com。执行之前,需要向http://npmjs.com申请用户名

powershell 复制代码
# 需要向npmjs.com申请用户名
$ npm adduser
# 登录
$ npm login
# 发布
$ npm publish
# 如果当前模块是一个beta版,比如1.3.1-beta.3,那么发布的时候需要使用tag参数,将其发布到指定标签,默认的发布标签是latest
$ npm publish --tag beta
# 如果发布私有模块,模块初始化的时候,需要加上scope参数。只有npm的付费用户才能发布私有模块。
$ npm init --scope=<yourscope>
# 如果你的模块是用ES6写的,那么发布的时候,最好转成ES5。首先,需要安装Babel。
$ npm install --save-dev babel-cli@6 babel-preset-es2015@6

然后,在package.json里面写入build脚本。

powershell 复制代码
"scripts": {
  "build": "babel source --presets babel-preset-es2015 --out-dir distribution",
  "prepublish": "npm run build"
}

运行上面的脚本,会将 source 目录里面的ES6源码文件,转为 distribution 目录里面的 ES5 源码文件。然后,在项目根目录下面创建两个文件 .npmignore 和 .gitignore,分别写入以下内容。

powershell 复制代码
// .npmignore
source
// .gitignore
node_modules
distribution
npm deprecate

如果想废弃某个版本的模块,可以使用 npm deprecate 命令。

powershell 复制代码
$ npm deprecate my-thing@"< 0.2.3" "critical bug fixed in v0.2.3"

3.11 使用npm版本控制

npm内置了版本控制功能,允许你通过简单的命令来更新项目的版本号。这有助于在发布新版本时跟踪和管理项目的版本。

你可以使用以下命令来更新版本号:
npm version patch :将版本号中的补丁级别加1(例如,从1.0.0到1.0.1)。
npm version minor :将版本号中的次要级别加1,并将补丁级别重置为0(例如,从1.0.0到1.1.0)。
npm version major :将版本号中的主级别加1,并将次要级别和补丁级别重置为0(例如,从1.0.0到2.0.0)。

npm会自动更新package.json中的版本号,并提交一个新的git commit和tag。

3.22 npm资源

npm官网 :查找和发布npm包的平台。
npm文档 :npm的官方文档,包含各种命令和功能的详细说明。
npm博客:了解npm的最新动态、教程和最佳实践

四、总结

npm是Node.js生态系统中不可或缺的一部分,它提供了强大的依赖管理和包发布功能。通过掌握npm的基础用法和技巧,你可以更加高效地使用npm来加速项目的开发过程,并与其他开发者和工具进行无缝集成。

相关推荐
梓贤Vigo5 小时前
【Axure视频教程】自制上传按钮
交互·产品经理·axure·原型·教程
Ztiddler7 小时前
【npm设置代理-解决npm网络连接error network失败问题】
前端·后端·npm·node.js·vue
三天不学习7 小时前
前端工程化-node/npm/babel/polyfill/webpack 一文速通
前端·webpack·npm
水w1 天前
Node.js windows版本 下载和安装(详细步骤)
开发语言·前端·windows·npm·node
guokanglun1 天前
npm镜像查看和修改
前端·npm·node.js
你的代码我的心1 天前
解决 npm xxx was blocked, reason: xx bad guy, steal env and delete files
npm
明天最后1 天前
由于Two-Factor Authentication导致github发布npm包失败
前端·npm·github
平芜尽处是春山-2 天前
vue3项目执行npm install下载依赖报错问题排查方法
前端·npm·node.js
Micheal_Wayne3 天前
“无关紧要”的小知识点:“xx Packages Are Looking for Funding”——npm fund命令及运行机制
前端·npm·node.js
Anjgst3 天前
淘宝 NPM 镜像源
前端·npm·node.js