【问题标题】:Calling "npm run generate" from PHP file results in "npm ERR! code ELIFECYCLE"从 PHP 文件调用“npm run generate”会导致“npm ERR!code ELIFECYCLE”
【发布时间】:2021-04-13 08:30:57
【问题描述】:

我从 PHP 调用 npm run generate 从 NuxtJS 生成静态站点。运行以下代码会导致 返回代码:254 - npm ERR!代码 ELIFECYCLE.

<?php
exec("export PATH=/www/htdocs/w01234567/nodejs/bin && npm run generate 2>&1", $out, $result);
echo "ReturnCode: " .$result ."<br>";
echo "Output: " ."<br>";
echo "<pre>"; print_r($out);
?>

generate.php 文件与所有 NuxtJS 文件位于同一文件夹中。 (https://example.com/12345/generate.php)

如果我通过 SSH(通过 PuTTY)调用 npm run generate,它可以工作。

到目前为止我的尝试:

  • 更新/重新安装所有 node_modules
  • 更新/重新安装 nodejs/npm

如何解决这个错误?

编辑:完整的错误日志:

0 info it worked if it ends with ok
1 verbose cli [ 'node', '/www/htdocs/w12345678/nodejs/bin/npm', 'run', 'generate' ]
2 info using npm@6.14.10
3 info using node@v15.4.0
4 verbose node symlink /www/htdocs/w12345678/nodejs/bin/node
5 verbose run-script [ 'pregenerate', 'generate', 'postgenerate' ]
6 info lifecycle new-blog@1.0.0~pregenerate: new-blog@1.0.0
7 info lifecycle new-blog@1.0.0~generate: new-blog@1.0.0
8 verbose lifecycle new-blog@1.0.0~generate: unsafe-perm in lifecycle true
9 verbose lifecycle new-blog@1.0.0~generate: PATH: /www/htdocs/w12345678/nodejs/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/www/htdocs/w12345678/example.com/abcdefgh123456789/node_modules/.bin:/www/htdocs/w12345678/nodejs/bin
10 verbose lifecycle new-blog@1.0.0~generate: CWD: /www/htdocs/w12345678/example.com/abcdefgh123456789
11 silly lifecycle new-blog@1.0.0~generate: Args: [ '-c', 'nuxt generate' ]
12 info lifecycle new-blog@1.0.0~generate: Failed to exec generate script
13 silly lifecycle new-blog@1.0.0~generate: Returned: code: -2  signal: null
14 info lifecycle new-blog@1.0.0~generate: Failed to exec generate script
15 verbose stack Error: new-blog@1.0.0 generate: `nuxt generate`
15 verbose stack spawn sh ENOENT
15 verbose stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:276:19)
15 verbose stack     at onErrorNT (node:internal/child_process:476:16)
15 verbose stack     at processTicksAndRejections (node:internal/process/task_queues:80:21)
16 verbose pkgid new-blog@1.0.0
17 verbose cwd /www/htdocs/w12345678/example.com/abcdefgh123456789
18 verbose Linux 4.15.0-129-generic
19 verbose argv "node" "/www/htdocs/w12345678/nodejs/bin/npm" "run" "generate"
20 verbose node v15.4.0
21 verbose npm  v6.14.10
22 error code ELIFECYCLE
23 error syscall spawn sh
24 error file sh
25 error path sh
26 error errno -2
27 error new-blog@1.0.0 generate: `nuxt generate`
27 error spawn sh ENOENT
28 error Failed at the new-blog@1.0.0 generate script.
28 error This is probably not a problem with npm. There is likely additional logging output above.
29 verbose exit [ -2, true ]

【问题讨论】:

  • 检查权限
  • 你能解释一下是哪个文件夹或文件吗?谢谢
  • 你有完整的错误输出吗? ELIFECYCLE 总是指向生命周期脚本中的另一个错误(在本例中为generate),并且输出中应该有一个日志文件,可能有也可能没有更多详细信息。您也可以尝试手动将npm bin 添加到路径(node_modules/.bin)。
  • @ZacAnger 感谢您的回答。刚刚将完整的错误日志添加到我的问题中。它有助于确定问题吗?
  • 是的:我认为真正的问题是 spawn sh ENOENT 行,它指出 PATH 是一个问题,仔细观察它是:export PATH=/www/htdocs/w01234567/nodejs/bin 应该是 export PATH=/www/htdocs/w01234567/nodejs/bin:$PATH — 你是覆盖所有PATH。 NPM 脚本调用 sh -c [the stuff in the script] 这是它失败的地方。

标签: php node.js npm webpack nuxtjs


【解决方案1】:
-export PATH=/www/htdocs/w01234567/nodejs/bin
+export PATH=/www/htdocs/w01234567/nodejs/bin:$PATH

您正在完全覆盖 PATH 而不是添加到它之前,因此 npm 脚本无法运行,因为 npm 退出。

编辑:

在聊天中,我们发现PHP脚本中根本不存在PATH,于是手动重建:export PATH=/www/htdocs/w123456/nodejs/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin &amp;&amp; npm run generate 2&gt;&amp;1"。为什么 PATH 在我们不知道的 PHP 脚本中无法访问,但是从公共路径手动构建它是可行的。

【讨论】:

  • 刚试过export PATH=/www/htdocs/w01234567/nodejs/bin:$PATH,但得到了同样的错误。我可以运行任何脚本来验证正确的 PATH 或类似的东西吗?
  • 该死,我很肯定就是这样。你有时间聊天吗? chat.stackoverflow.com/rooms/227097/zacanger-and-tom 要检查您的PATH,您可以在设置后运行echo $PATH。您还可以使用which shwhich bashwhich nuxt 仔细检查可用的内容,这可以澄清事情(在 PHP 脚本中,因为这是更改 PATH 的地方)。
  • 我正在聊天中
猜你喜欢
  • 1970-01-01
  • 2019-07-28
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
  • 2020-02-12
  • 2021-07-29
  • 1970-01-01
相关资源
最近更新 更多