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

在相邻目录运行NPM脚本时如何保留当前工作目录

解决方案

首先明确问题原因:npm run的--prefix参数会默认将脚本的运行工作目录切换到指定的prefix路径,才会导致FolderA里的代码读取到的process.cwd()是FolderA的路径,而非你执行命令时所在的FolderB路径。

你可以根据自己的场景选择以下任意一种方法实现需求:

  • 方案1:修改FolderA的index.js代码(跨平台最稳妥)
    直接在FolderA的index.js最顶部添加一行代码,主动切换工作目录到npm命令执行时的原始路径:

    process.chdir(process.env.INIT_CWD ?? process.cwd());
    

    INIT_CWD是npm执行时自动注入的环境变量,固定存储你执行npm命令时所在的目录,也就是你需要的FolderB路径。添加这行代码后,后续所有业务代码的运行效果和直接在FolderB下执行完全一致。

  • 方案2:修改FolderA的package.json脚本(无需改动业务代码)
    只需要修改FolderA的package.json中的start脚本,运行时先切换回原始工作目录再执行业务逻辑即可:

    1. 类Unix/Mac环境写法:
    {
      "scripts": {
        "start": "cd \"$INIT_CWD\" && node index.js"
      }
    }
    
    1. Windows cmd环境写法:
    {
      "scripts": {
        "start": "cd /d \"%INIT_CWD%\" && node index.js"
      }
    }
    
    1. 全平台兼容写法:先安装cross-cd依赖,再修改脚本:
    {
      "scripts": {
        "start": "cross-cd \"$INIT_CWD\" && node index.js"
      }
    }
    
  • 方案3:完全不修改FolderA的内容,直接调整执行命令
    如果你的start脚本仅为启动index.js,不需要依赖package.json里的其他配置,直接在FolderB下执行以下命令即可,天然保留FolderB作为工作目录:

    node ../FolderA/index.js
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:54:02