运行 NPM 子进程导致“找不到模块”

Posted

技术标签:

【中文标题】运行 NPM 子进程导致“找不到模块”【英文标题】:Running NPM subprocess results in "Cannot find module" 【发布时间】:2022-01-22 21:08:58 【问题描述】:

我正在创建一个 python 脚本,它应该使用npm run start 运行我的后端和前端,因为它们都是节点项目。 子进程不应等到它们完成执行下一行代码,我想将它们分离。

我正在 Windows 10 上开发。

这样做时我收到以下错误:

Error: Cannot find module 'C:\CodigoAsisa\Backend\npm'
←[90m    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15)←[39m
←[90m    at Function.Module._load (internal/modules/cjs/loader.js:667:27)←[39m
←[90m    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)←[39m
←[90m    at internal/main/run_main_module.js:17:47←[39m 
  code: ←[32m'MODULE_NOT_FOUND'←[39m,
  requireStack: []

internal/modules/cjs/loader.js:818
  throw err;

我正在使用以下代码:

subprocess.Popen(["node", "npm", "run", "start"], cwd="C:\\CodigoAsisa\\Backend",
                       stdout=subprocess.PIPE,
                       universal_newlines=True)

我也尝试过以下代码:

subprocess.run('cd C:\\CodigoAsisa\\Frontend && npm run start',shell=True)

使用上面的代码(使用subprocess.run() 的代码)时,我没有收到与节点相关的错误(也没有任何错误),但这不允许我分离我的进程,因此继续下一行代码。 我需要这个进程在后台运行,据我所知, subprocess.run() 等待进程结束。

感谢任何帮助!

【问题讨论】:

【参考方案1】:

我通过使用where npm 解决了这个问题,它返回了我的可执行位置,在本例中位于 C:\Program Files\nodejs\npm.cmd 随后将我的代码更改为:

subprocess.Popen(["C:\\Program Files\\nodejs\\npm.cmd", "run","start"],cwd="C:\\CodigoAsisa\\Frontend",
                           stdout=devnull,
                           universal_newlines=True)

【讨论】:

以上是关于运行 NPM 子进程导致“找不到模块”的主要内容,如果未能解决你的问题,请参考以下文章

更新后 NPM 死机 - 找不到模块 (OSX)

由于以下错误,无法运行任何 npm 命令 - 错误:找不到模块“semver”

NPM 全局安装“找不到模块”

每当我尝试在 VS Code 中运行任何与 npm 相关的命令时,都会出现路径错误:[找不到模块]

“npm update -g”后出现错误“找不到模块‘npmlog’”

吉普错误!堆栈错误:找不到模块“psl”