本文共 2709 字,大约阅读时间需要 9 分钟。
简单来说,npm(JavaScript Package Manager)就是一个 JavaScript
包管理工具,通过它可以使用封装好的功能模块,也可以封装自己的功能模块。如果只是简单的使用 npm ,那么可以通过安装 Node.js
来安装 npm 。但如果在实际工作过程中,需要对多个版本的 Node.js
进行测试,或者试图以命令行的方式使用获取的模块功能,则可通过 nvm(Node Version Manager)来安装 npm 来规避版本切换或运行权限的问题。
使用 nvm 工具能够更好的管理和使用 npm 的不同版本,打开 Mac OS X
终端,执行下面的命令:
export NVM_DIR="$HOME/.nvm" && ( git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR" cd "$NVM_DIR" git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`) && \. "$NVM_DIR/nvm.sh"
这几行命令实际是从 github
上将 nvm 下载到本地目录,再执行 nvm.sh
脚本,实现 nvm 的安装,所以升级 nvm 时,需要先拉取最新的代码,再次执行 nvm.sh
脚本。
接着,再将下面的代码添加到 ~/.bashrc
,~/.profile
, 或 ~/.zshrc
中,来实现终端打开后 nvm 的加载。
export NVM_DIR="$HOME/.nvm"[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
安装后,重启终端,便可以执行下面的命令:
nvm install node
下载并编译安装最新版本的 Node.js
nvm install v8.16.0
下载并编译安装指定版本的 Node.js
nvm ls-remote
查看远程可使用的 Node.js
版本nvm ls
查看本地安装的 Node.js
版本nvm use [node | <version>]
切换到安装的最新或指定的 Node.js
版本nvm exec <version> node --version
执行指定版本的 Node.js
nvm which [current | <version>]
查看当前或指定的 Node.js
版本所在位置使用
node -v
命令,可以查看当前Node.js
的版本,执行npm config get prefix
命令,查看模块安装目录的前缀,都可以验证版本切换确实是有效的。
npm install <package_name>
安装本地包,如果当前目录下没有 node_modules
目录并且没有 package.json
文件,则会去用户 home 目录下查找 node_modules
目录,有则安装在其目录下,否则,将会在 home 目录下创建 node_modules
目录,并将包安装在该目录下。
npm init [-y | --yes]
实际进行开发工作时,我们更希望在工程目录下安装并管理相关的依赖包,那么在工程目录下使用该命令进行初始化,在当前目录下生成 package.json
文件。如此,再在该目录下执行包安装命令,则包会安装在该目录下。
npm install <package_name> [--save | --save-dev]
可以直接修改 package.json
文件,添加相关的依赖包及其版本,然后再执行 npm install
命令进行安装。但是也可以直接使用上面的命令,安装依赖包,并将依赖信息添加到 package.json
文件中。
npm outdated | update
在 package.json
目录下,执行上面的命令,检查是否有依赖包更新,或直接进行更新。
npm uninstall <package> [--save | --save-dev]
与 npm install
相对应,执行上面的命令,可以卸载安装的包。
npm install -g <package_name>
如果想以命令行的方式使用第三方模块所提供的功能,为了可以在任意目录下使用命令,则应将包安装在全局目录下。如,可以执行 npm install npm@latest -g
命令,来更新最新的 npm 工具。
npm config set prefix <global-node_modules-path>
设置包的全局安装路径前缀,在全局安装包时,包会安装到 prefix/lib/node_modules
目录下,并且相应的运行命令会初始化在 prefix/bin
目录下。设置完成后,可以使用 npm config get prefix
命令查验。
npm 的命令,不指定全局模式时,会应用在当前目录下,若不满足条件,则会去用户 home 目录下应用。
如npm ls
先在当前目录下查找node_modules
目录,没有结果,则去用户 home 目录下查找安装的模块。
简单来说,包是由 package.json
修饰的一个文件或文件目录,而模块则是可以被 Node.js
使用 require()
引入的任意文件或文件目录。
对于包而言,其表示形式并不局限于一个文件或目录,压缩包,指向压缩包的链接,在 npm 中注册了的包名称,可以进行 git 拷贝的地址等都是包的表现形式,只要其最终指向都是被 package.json
修饰的文件或目录即可。
一个简单的 JavaScript
文件,包含 index.js
文件的目录,或者是拥有 package.json
文件且文件中包含 main
值的目录,都可以被 Node.js
使用 require
加载为一个模块。但是,包并不一定能被加载为一个模块,如一个只被当作命令行工具使用的包。所以在 npm 中,使用 package.json
对定义包的文件进行命名,而安装包的目录却被命名为 node_modules
,就是因为加载的模块不一定是包,而包不一定能过被加载为模块。
Node.js 官网:
npm 官网:
npm 中文文档:
nvm 源码地址:
转载地址:http://btdws.baihongyu.com/