导出生产环境依赖应使用npm ls --depth=0 --prod | grep "@" | awk '{print $1 "@" $2}' | sed 's/├── //; s/└── //' > dependencies.txt,该命令零依赖、精准提取包名与版本号,适用于部署和交接场景。

导出 package.json 里声明的依赖(生产环境)
多数时候你只需要导出 dependencies,比如部署或交接时给同事看用了哪些库。直接在项目根目录终端运行:
npm list --depth=0 --prod --json | jq -r 'keys[]' > dependencies.txt但前提是已装
jq。更稳妥、零依赖的方式是:npm ls --depth=0 --prod | grep "@" | awk '{print $1 "@" $2}' | sed 's/├── //; s/└── //' > dependencies.txt注意:Windows PowerShell 会因管道符和空格报错,建议用 VSCode 内置终端(默认是 Git Bash 或 WSL),或者改用 cmd 兼容写法:npm ls --depth=0 --prod | findstr "@" > dependencies.txt然后手动删掉无关行——
findstr 不支持正则提取版本号,所以这一步只适合快速粗筛。
导出含版本号的完整依赖树(含 devDependencies)
如果你要备份或审计全量依赖(比如 CI 构建前校验),npm list 默认只显示顶层,加 --all 会递归太长。推荐用:
npm list --all --prod=false --json > full-deps.json
--prod=false 是关键,它等价于同时包含 dependencies 和 devDependencies。但输出是嵌套 JSON,人眼难读。真正实用的是生成扁平化列表:npm list --depth=0 --all | sed '/^.*@.*$/!d; s/├── //; s/└── //; s/ └── //' | sort -u > all-deps-flat.txt这个命令过滤掉缩进和非包行,再去重排序,结果接近
pip freeze 风格。
VSCode 里一键执行?靠任务配置 + 键盘快捷键
VSCode 本身不内置“导出依赖”命令,但你可以把它变成一键操作:
- 在项目根目录建
.vscode/tasks.json - 填入一个 shell 类型 task,
command设为上面任一npm list命令 - 设
"group": "build"并启用"presentation": {"echo": false, "reveal": "never"}避免弹窗干扰 - 最后在
keybindings.json绑定快捷键,例如ctrl+alt+d
> deps.txt,否则结果只闪一下就消失。另外,如果项目用 yarn,把所有 npm 换成 yarn list 即可,但 yarn list 没有 --prod 参数,得用 --production 替代。
别忽略 node_modules 实际安装的版本
npm list 读的是 package-lock.json 或 node_modules 状态,不是 package.json 的理想版本范围。比如 "lodash": "^4.17.0" 可能实际装了 4.17.21。导出时若要精确复现环境,必须用 npm list --depth=0 --all 而不是解析 package.json。还有一个坑:如果项目启用了 npm install --no-package-lock,package-lock.json 不存在,npm list 输出可能不稳定——此时应优先检查 node_modules 目录是否完整,再执行导出。











