当前位置: 首页 > 知识库问答 >
问题:

npm-在cwd以外的目录中运行脚本

孟修竹
2023-03-14

我有一个构建应用程序的脚本。这需要在当前目录中创建一个新目录,在其中解压应用程序的脚手架文件。

在我的脚本末尾,我运行了一系列npm/node命令,如下所示(appDir是对为托管应用程序而创建的子目录的引用;它在这些命令运行时存在):

const postInstCmds = [
    'cd '+appDir,
    'npm init -y',
    'npm install add-npm-scripts --save-dev',
    'npm install http-server --save-dev',
    'add-npm-scripts server "http-server"',
    'npm run server'
];
const execSync = require('child_process').execSync;
postInstCmds.forEach(cmd => execSync(cmd));

然而,第一个cd命令似乎被忽略了;后续命令正在父目录而不是子目录中执行。

我读过这篇文章,其中明确指出npm支持cd操作,但也许我误解了什么(我不是npm向导)。我还尝试使用npm的prefix参数指定路径,但没有乐趣。

[更新]

链接的dup建议npm启动

我也试过npm init--prefix


共有1个答案

祖波光
2023-03-14

您的代码为每个命令运行不同的子进程。因此,cd命令在子进程中运行并退出。然后,下一个命令在新的子进程中运行,该子进程位于您启动的原始目录中,而不是在命令导航到的目录中。

一种修复方法是去掉cd命令,而将目录作为cwd选项传递给每个调用

postInstCmds.forEach(cmd => execSync(cmd, {cwd: appDir}));
 类似资料:
  • 我有一个shell脚本文件,我想从java运行。我的java工作空间目录与脚本的目录不同。 我收到此错误: 我在谷歌上搜索了一下,每一个解决方案都表明我在做正确的事情。 我试图把脚本文件放在src和Java项目的bin中,但它仍然说没有这样的文件或目录。 我做错了什么? 谢谢

  • 问题内容: 在PHP中,相对于www根目录,获取当前运行脚本的 父 目录的最干净方法是什么?假设我有: 要不就: 而且我需要正确插入斜线。你有什么建议?优选一个衬里。 编辑 我需要获得一个相对于www根目录的路径,为我提供文件系统中的绝对路径,这样就无法正常工作。另一方面,从www根目录开始。 问题答案: 如果您的脚本位于,则将返回以下内容: 要么 编辑 这是许多框架中用来确定来自app_root

  • 问题内容: pm2是否可以运行npm start脚本,还是只需要运行 所以在发展中 然后在pm2的生产环境中运行类似 有一个等效的方法可以做到这一点: 问题答案: PM2现在支持npm start: 要将名称分配给PM2进程,请使用以下选项:

  • 问题内容: 假设我有 我可以运行什么NPM命令以使所有这些脚本按顺序启动。当我使用前/后修复时,它们顺序启动,但是它们不等待父脚本完成才执行。我假设唯一的解决方案是:在async.series辅助函数中触发shell命令时,如何使Gulp任务依次触发??我知道可以使用Gulp做到这一点,但我现在想坚持使用NPM来探索其功能。谢谢你的帮助! 问题答案: 通过npm run调用这些脚本,并用双“&”号

  • 问题内容: 我想尝试使用npm为Web应用程序运行各种构建任务。我知道我可以这样添加一个字段来做到这一点: 当您使用带有许多选项的更复杂的命令时,这变得很笨拙。是否有可能将这些命令移至bash脚本或类似的东西?就像是: 在文件中的哪里执行命令? 阅读这篇文章似乎是这样,但是我不清楚我应该在哪里放置文件或者丢失了什么。 问题答案: 完全有可能… 另外,请确保在bash文件的顶部放置一个哈希爆炸 还请

  • 假设我有 我可以运行什么NPM命令来让所有这些脚本按顺序启动。当我使用前/后修复时,它们会顺序启动,但不会等到父脚本完成后才执行。我假设唯一的解决方案是这样的:当在async.series助手函数中触发shell命令时,我如何让Gulp任务依次触发??我知道这可以用古普来完成,但我现在想坚持使用NPM来探索它的能力。感谢任何帮助!