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

如何在Node.js项目中跨目录执行脚本并作用于目标项目?

跨目录执行Node.js项目脚本的解决方案

问题场景

现有两个Node.js项目:

  • 项目一:位于/project/one
  • 项目二:位于/project/two

在项目一的JS函数中执行以下代码,意图操作项目二,但实际脚本仍作用于项目一:

const projectTwoPath = "/project/two";
exec(`sh ${projectTwoPath}/projectRun.sh`, ...)
exec(`sh ./projectRun.sh`, {cwd: projectTwoPath }, ...)

其中/project/two/projectRun.sh内容为:

npx prisma migrate dev
pm2 start npm --name "project-two" -- run start

问题原因

脚本执行时的工作目录是调用它的目录(即/project/one),而非脚本所在目录。因此脚本中的npx、pm2命令会默认读取当前工作目录(项目一)的配置,而非项目二的。

解决方案

1. Linux控制台直接执行

在/project/one目录下,通过切换目录后执行脚本:

cd /project/two && sh projectRun.sh

或使用子shell避免影响当前会话的工作目录:

(sh -c "cd /project/two && ./projectRun.sh")

2. Node.js exec 实现

方法一:先切换目录再执行脚本

const { exec } = require('child_process');
const projectTwoPath = "/project/two";

exec(`cd ${projectTwoPath} && sh projectRun.sh`, (error, stdout, stderr) => {
  if (error) {
    console.error(`执行错误: ${error.message}`);
    return;
  }
  if (stderr) {
    console.error(`错误输出: ${stderr}`);
    return;
  }
  console.log(`执行结果: ${stdout}`);
});

方法二:指定exec的工作目录参数

确保cwd参数正确指向项目二目录,脚本路径基于该目录:

const { exec } = require('child_process');
const projectTwoPath = "/project/two";

exec(`sh projectRun.sh`, { cwd: projectTwoPath }, (error, stdout, stderr) => {
  if (error) {
    console.error(`执行错误: ${error.message}`);
    return;
  }
  if (stderr) {
    console.error(`错误输出: ${stderr}`);
    return;
  }
  console.log(`执行结果: ${stdout}`);
});

3. Node.js shelljs 实现

const shell = require('shelljs');
const projectTwoPath = "/project/two";

// 切换到项目二目录并执行脚本
shell.cd(projectTwoPath);
const runResult = shell.exec('sh projectRun.sh');

if (runResult.code !== 0) {
  console.error(`脚本执行失败: ${runResult.stderr}`);
} else {
  console.log(`脚本执行成功: ${runResult.stdout}`);
}

4. 优化脚本本身(推荐)

修改/project/two/projectRun.sh,在开头自动切换到脚本所在目录,这样无论从哪里执行脚本,都会作用于项目二:

#!/bin/bash
# 切换到脚本所在的目录
cd "$(dirname "$0")"
npx prisma migrate dev
pm2 start npm --name "project-two" -- run start

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:55:22