You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中直接调用process.cwd()与导入node:process的区别及选型

Node.js中process.cwd()与导入node:process的cwd()的区别及CLI应用选型建议

问题背景

我习惯在Node.js应用中直接调用process.cwd(),但近期查阅Node.js文档后发现,官方推荐从node:process中导入cwd。请问直接调用process.cwd()和导入后调用的方式有何区别?

直接调用方式:

process.cwd()

导入后调用方式:

import {cwd} from 'node:process'

cwd()

我当前正在开发一个CLI应用,请问两者是否有区别?我应该选用哪种方式?


两者的核心区别

  • 模块系统与全局变量的差异
    直接调用的process是Node.js全局对象,在CommonJS和ESM模块中都能直接访问;而从node:process导入是ESM规范的模块化用法,属于明确的依赖引入,更契合现代JavaScript的模块化理念。
  • 树摇优化潜力
    若使用支持树摇(Tree Shaking)的打包工具(如webpack、Rollup),单独导入cwd可让打包器仅保留该函数的代码;而全局process会被当作完整对象处理,无法实现精准的无用代码剔除。不过对于Node.js CLI应用而言,该优化的实际影响极小,因为CLI通常不会做大规模打包拆分。
  • 代码可读性与维护性
    显式导入cwd能让其他开发者一眼明确当前模块依赖了process的这个方法,代码意图更清晰;全局process则需要读者自行判断用到了它的哪个功能,在大型项目中维护成本略高。
  • 环境兼容性
    在部分严格的ESM环境(如某些前端构建场景或受限的Node.js runtime),全局process可能被禁用或不可用,此时必须采用模块化导入方式。但Node.js原生环境中,全局process始终可用。

CLI应用的选型建议

对于CLI应用来说,两种方式都能正常运行,但更推荐**从node:process导入cwd**的方式,原因如下:

  1. 符合Node.js官方推荐的ESM最佳实践,未来版本的Node.js可能会更偏向模块化的API调用方式。
  2. 显式导入让代码的依赖关系更透明,团队协作时更易维护。
  3. 虽然CLI应用通常不需要树摇,但养成模块化导入的习惯,能让代码在其他场景(比如后续需要打包CLI)更适配。

如果你的CLI应用同时支持CommonJS和ESM,也可做兼容处理;若为纯ESM项目,直接使用导入方式即可。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:25:24