【发布时间】: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