当前位置 : 首页 » 文章分类 :  开发  »  NPM-常用命令

NPM-常用命令

NPM 常用命令


npm init 初始化 Node.js 项目

npm init 命令用于初始化 Node.js 项目,也就是创建 package.json 文件。

npm init 交互式创建 package.json

执行 npm init 会启动一个​​交互式命令行问卷,依次询问 package name, version 等信息。

对于每个问题,可以直接按回车键接受括号内的默认值,也可以手动输入后回车确认:

npm init   
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help init` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (ts)  # 包名(默认是当前文件夹名)
version: (1.0.0) # 初始版本(遵循语义化版本规范 SemVer),默认 1.0.0
description:  # 项目描述
entry point: (index.js)  # 主入口 JS 文件
test command:   # 测试命令(如 mocha或 jest)
git repository: (https://github.com/masikkk/ts.git)  # Git 仓库 URL
keywords:  # 关键词(逗号分隔,用于 npm 搜索)
author:  # 作者信息(格式如:Your Name <email@example.com>)
license: (ISC)  # 许可证(默认为 ISC,常见的有 MIT、Apache-2.0 等)
type: (commonjs) 

在输入所有信息(或接受默认值)后,npm 会显示一个 package.json 内容预览,确认无误后回车即可自动创建 package.json 文件。

About to write to /Users/xxx/git/my/ts/package.json:

{
  "name": "ts",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/masikkk/ts.git"
  },
  "author": "",
  "license": "ISC",
  "type": "commonjs",
  "bugs": {
    "url": "https://github.com/masikkk/ts/issues"
  },
  "homepage": "https://github.com/masikkk/ts#readme"
}


Is this OK? (yes) 

npm init -y 跳过问卷直接创建 package.json

npm init -y 跳过交互式问卷,用默认值创建 package.json 文件。


npm install 安装模块

npm install 简写为 npm i

npm 的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有 -g 而已:

  • npm install -g pkg 全局安装,用于安装全局可用的命令行工具,例如 claude-code, hexo
  • npm install pkg 本地安装,用于安装仅在某个项目(文件夹)内使用的依赖

npm install pkg 本地安装(默认)

本地安装(Local Installation) 是默认安装方式。
安装在​​当前项目(运行 npm 命令时所在的目录)目录​​下的 ./node_modules 文件夹中,如果没有 node_modules 目录会自动创建。
用于为​​特定项目​​提供依赖。依赖信息记录在项目的 package.json 文件的 dependenciesdevDependencies 中。

安装之前,npm install 会先检查 node_modules 目录之中是否已经存在指定模块。如果存在,就不再重新安装了,即使远程仓库已经有了一个新版本,也是如此。
如果你希望,一个模块不管是否安装过,npm 都要强制重新安装,可以使用 -f--force 参数: npm install <packageName> --force

本地安装特点:

  • 项目隔离性:​​ 每个项目拥有独立的 node_modules,依赖版本互不影响(避免版本冲突)。
  • 版本控制:​​ package.json + package-lock.json 锁定了精确依赖版本,保证不同环境(开发、生产)一致性。
  • 依赖引用:​​ 项目代码通过 require('package_name')ES6 import 引入本地安装的包。
  • ​​启动脚本:​​ 在 package.json 的 scripts 中定义的项目命令(如 npm start, npm test)可直接使用本地安装的 CLI 工具(无需全局安装)。
  • 适用场景:​​ Web 框架(React, Vue, Angular)、功能库(Lodash, Axios)、构建工具(Webpack, Babel - 作为项目依赖时)、测试库(Jest, Mocha)等。

npm install -g pkg 全局安装

通过 -g 参数指定 全局安装(Global Installation)
安装在​​系统全局目录​​中(与具体项目无关)。​
​核心目的是为了安装供​​命令行(CLI)工具​​在终端/命令行中​​全局使用​​。

通过 npm root -g 命令可查看全局安装路径,例如:

  • /opt/homebrew/lib/node_modules Mac 上
  • /usr/local/lib/node_modules Unix 上
  • %AppData%\npm\node_modules Windows 上

全局安装特点:

  • 全局可用性:​​ 安装后,其提供的​​命令行命令​​可在系统任何路径下执行(需确保全局安装目录在系统的 PATH 环境变量中)。
  • 非代码依赖:​​ 在项目代码中​​不能​​通过 require 或 import 引入全局安装的包(除非项目本地也安装了)。
  • 版本单一性:​​ 整个系统通常只有一个版本,可能导致不同项目对全局工具版本要求不同时产生冲突。
  • 适用场景:​​ 提供​​终端命令​​的工具包

典型的全局工具包括:

  • 脚手架工具:create-react-app, vue-cli, @angular/cli, expo-cli
  • 构建/任务工具:gulp-cli, grunt-cli
  • 包管理工具:yarn, pnpm (可以用npm安装它们自身)
  • 实用工具:nodemon (自动重启Node应用), http-server (快速启动静态服务器), typescript (tsc命令)
  • 跨项目工具:eslint, prettier (若需全局使用其CLI)

npm install -g npm@latest 升级全局npm版本

全局升级 npm 自身的版本到最新版
npm install -g npm@latest


npm install 根据 package.json 安装包

npm install 命令执行目录有 package.json 文件时,会根据 package.json 安装依赖
package.json 中的 dependenciesdevDependencies 依赖包都会被安装

npm install --only=prodnpm install --production 只安装​​ dependencies 依赖


npm install pkg –save 安装并写入 package.json(5.0.0+自动)

npm install pkg --save 安装好后写入 package.json 的 dependencies 中(生产环境依赖)

从 npm 5.0.0 开始,npm install pkg ​​自动等效于​​ npm install pkg --save 这意味着不需要显式添加 --save 选项,npm 就会把依赖包及其版本添加到 package.json 文件中的 dependencies 部分


npm install pkg –save-dev 安装开发依赖

npm install 模块 --save-dev 安装好后写入 package.json 的 devDepencies 中(开发环境依赖)


npm install --unsafe-perm

npm 出于安全考虑不支持以 root 用户运行,即使你用 root 用户身份运行了,npm 会自动转成一个叫 nobody 的用户来运行,而这个用户几乎没有任何权限。这样的话如果你脚本里有一些需要权限的操作,比如写文件(尤其是写 /root/.node-gyp ),就会崩掉了。

为了避免这种情况,要么按照 npm 的规矩来,专门建一个用于运行 npm 的高权限用户;要么加 –unsafe-perm 参数,这样就不会切换到 nobody 上,运行时是哪个用户就是哪个用户,即使是 root。

一劳永逸的方法:
npm config set unsafe-perm 针对当前用户的
npm config -g set unsafe-perm 全局的

https://docs.npmjs.com/misc/config#unsafe-perm


npm install permission denied 问题

npm install 的时候,使用了 sudo,还是报权限错误 permission denied

例如 sudo npm update hexo

$ sudo npm update hexo
Password:

> fsevents@1.2.9 install /Users/xxx/git/madaimeng_backup/node_modules/hexo-fs/node_modules/fsevents
> node install

node-pre-gyp WARN Using needle for node-pre-gyp https download
node-pre-gyp WARN Pre-built binaries not installable for fsevents@1.2.9 and node@10.4.0 (node-v64 ABI, unknown) (falling back to source compile with node-gyp)
node-pre-gyp WARN Hit error EACCES: permission denied, mkdir '/Users/xxx/git/madaimeng_backup/node_modules/hexo-fs/node_modules/fsevents/lib'
gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir '/Users/xxx/git/madaimeng_backup/node_modules/hexo-fs/node_modules/fsevents/build'
gyp ERR! System Darwin 17.7.0
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "configure" "--fallback-to-build" "--module=/Users/xxx/git/madaimeng_backup/node_modules/hexo-fs/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node" "--module_name=fse" "--module_path=/Users/xxx/git/madaimeng_backup/node_modules/hexo-fs/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64" "--napi_version=3" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v64"
gyp ERR! cwd /Users/xxx/git/madaimeng_backup/node_modules/hexo-fs/node_modules/fsevents
gyp ERR! node -v v10.4.0
gyp ERR! node-gyp -v v5.0.3
gyp ERR! not ok

解决方法:
在npm install 的时候,同时使用 sudo--unsafe-perm
sudo npm install --unsafe-perm

$ sudo npm install --unsafe-perm
Password:

> fsevents@1.2.9 install /Users/xxx/git/madaimeng_backup/node_modules/hexo-fs/node_modules/fsevents
> node install

node-pre-gyp WARN Using needle for node-pre-gyp https download
[fsevents] Success: "/Users/xxx/git/madaimeng_backup/node_modules/hexo-fs/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node" is installed via remote

> fsevents@1.2.9 install /Users/xxx/git/madaimeng_backup/node_modules/nunjucks/node_modules/fsevents
> node install

node-pre-gyp WARN Using needle for node-pre-gyp https download
[fsevents] Success: "/Users/xxx/git/madaimeng_backup/node_modules/nunjucks/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node" is installed via remote
added 138 packages from 35 contributors and audited 7136 packages in 7.598s
found 6 vulnerabilities (2 low, 3 moderate, 1 high)
  run `npm audit fix` to fix them, or `npm audit` for details

sudo npm install 时,报错 permission denied 的解决方案
https://newsn.net/say/sudo-npm-install-permission.html


npm ci 根据 package-lock.json 安装依赖

npm ci 命令类似 npm install 安装依赖,但是严格按 package-lock.json 或 npm-shrinkwrap.json 安装,适用于 CI/CD 或生产环境,用于​​快速、可靠地安装依赖项。

npm ci 命令的特点:

  • npm ci ​​强制要求​​项目根目录下必须存在 package-lock.json 或 npm-shrinkwrap.json 文件。
  • npm ci 完全依赖 package-lock.json 或 npm-shrinkwrap.json 文件,不修改它。
  • npm ci 会​​严格检查​​锁定文件 package-lock.json 是否与当前 package.json 文件中的依赖项及其范围兼容。如果不兼容(例如,package.json 修改后没有重新生成锁定文件),会​​直接报错并退出​​(返回非 0 状态码),而不会尝试自动修复。
  • 在执行任何安装操作之前,npm ci ​​总是会删除现有的 node_modules 目录​​(如果存在)。这是与 npm install 的最大行为差异之一
  • npm ci ​​完全忽略​​ package.json 中的依赖版本范围声明 ^, ~
  • npm ci 会优先尝试从本地 npm 缓存 (~/.npm) 中获取所需的包。如果缓存中有锁定的版本,会直接解压链接,速度极快。
  • 通过跳过依赖关系解析和 package.json 中的版本范围匹配,并充分利用缓存,安装速度通常比 npm install ​​快得多

npm list 查看安装包

npm list 查看本地已安装模块

npm list --depth=0 查看本地安装包
–depth 表示深度,我们使用的模块会有依赖,深度为零的时候,不会显示依赖模块

npm list --depth --global 查看全局安装包

npm list -g 查看全局已安装模块

npm list –depth=0 仅查看直接依赖

仅列出项目直接依赖


npm root -g 查看全局安装路径

npm root -g
/opt/homebrew/lib/node_modules

npm update 更新模块

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

npm update <package> 可以把当前目录下 node_modules 子目录里边的对应模块更新至最新版本。
npm update <package> -g 可以把全局安装的对应命令行程序更新至最新版。


npm uninstall 删除模块

删除全局模块
npm uninstall -g <package>

删除本地模块
npm uninstall 模块

删除本地模块时你应该思考的问题:是否将在 package.json 上的相应依赖信息也消除?
npm uninstall 模块 删除模块,但不删除模块留在 package.json 中的对应信息
npm uninstall 模块 --save 删除模块,同时删除模块留在 package.json 中 dependencies 下的对应信息
npm uninstall 模块 --save-dev 删除模块,同时删除模块留在 package.json 中 devDependencies 下的对应信息

例如

sudo npm uninstall hexo-generator-search --save

Password:
removed 1 package and audited 7132 packages in 4.202s
found 6 vulnerabilities (3 low, 2 moderate, 1 high)
  run `npm audit fix` to fix them, or `npm audit` for details

npm search 搜索模块

npm search <Module Name>

npm prune 清理无效包

手动删除 package.json 中的依赖后,执行 npm prune 可删除所有 package.json 中不存在的包


npm run script-name 执行脚本

在项目根目录(即包含 package.json 的目录)下运行 npm run script-name 例如 npm run dev 时,内部的执行顺序是:
1、查找 package.json:​​ npm 首先在当前目录及其父目录中查找 package.json 文件。
2、定位 scripts:​​ 找到 package.json 后,npm 会查找其中的 scripts 对象。
3、匹配脚本名:​​npm 检查 scripts 对象中是否存在一个键(属性名)与你输入的 script-name(例如 dev)匹配。
4、执行命令字符串:如果找到了匹配的脚本,npm 会将其值(例如 vite )作为一个 ​​shell 命令​​ 在一个​​子进程中​​执行。
执行脚本命令时有个关键点:环境变量 PATH 的修改:​​ npm 在执行这个命令前,会做一件非常重要的事情:它会将项目本地的 node_modules/.bin 目录 ​​临时地添加到​​ shell 的 PATH 环境变量​​的最前面​​。
5、vite 可执行文件是一个 Node.js 脚本。它被执行后,读取项目的配置文件(如 vite.config.js),然后启动开发服务器(包含模块热重载 - HMR)、编译 Vue 单文件组件(.vue)等,最终让你的 Vue3 应用在浏览器中运行起来。


npx 执行包命令(npm 5.2+)

npx(Node Package Executor) 是随 ​​npm 5.2.0+​​ 版本一起发布的强大命令行工具,它极大地简化了在 Node.js 生态中​​执行包(尤其是 CLI 工具)​​的流程,而无需先进行全局安装或在项目中作为依赖项安装。

npx command 执行时的命令查找顺序:

  1. 优先项目本地路径 node_modules/.bin/:npx 首先检查当前目录或父目录中的 node_modules/.bin/ 下是否存在该命令。如果有,则直接执行本地版本(优先项目依赖)。
  2. 全局路径 PATH:如果本地找不到,它会检查系统环境变量 PATH 中是否存在全局安装的命令。
  3. 远程查找 npm 仓库:如果以上都找不到,​​​npx 会在 npm 远程仓库查找名为 <command> 的包。​这才是 npx 最强大的地方。

npx 远程包命令执行过程
如果远程包是一个可执行的 CLI 工具(通常包含一个 bin.js 入口),npx 处理顺序如下:

  1. 临时安装:将该包的最新版本(或根据指令指定的版本)下载到一个全局缓存目录中,通常是 ~/.npm/_npx
  2. 执行命令:使用该临时安装的包执行用户指定的命令
  3. 清理(可选):默认情况下,执行完毕后​​不会保留​​这个临时安装的包。下次执行时如有需要会再次下载最新版。除非使用 -p(持久化) 或者环境变量控制缓存行为。

npx cmd@ver 执行特定版本的命令
例如 npx create-react-app@4.0.3 my-app

npx <command> 后面的所有额外参数都会直接传递给要执行的命令
例如 npx http-server -p 8080 -c-1 传递参数 -p 8080 和 -c-1 给 http-server


上一篇 Java-RMI

下一篇 Hexo博客(05)写作定制与插件

阅读
评论
3.7k
阅读预计16分钟
创建日期 2016-04-18
修改日期 2025-08-20
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论