我试图运行一个shell命令让gulp进行编译。
我经常跑:
cd
cd /var/www/html/
npm uninstall gulp --save
npm install gulp --save
npm start
并且gulp文件编译得很好。
我需要知道是否有一种编译gulp文件的方法(本质上是从php文档运行npm start命令。
$output = shell_exec('./compileNpmStart.sh');
// display $output
echo $output;
这似乎可以编译但是:
编译后我得到了一个日志文件而不是正确的编译。
0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/nodejs', '/usr/bin/npm', 'start' ]
2 info using npm@4.1.2
3 info using node@v7.5.0
4 verbose run-script [ 'prestart', 'start', 'poststart' ]
5 info lifecycle base-prep@1.0.0~prestart: base-prep@1.0.0
6 warn lifecycle npm is using /usr/bin/nodejs but there is no node binary in the current PATH. Use the `--scripts-prepend-node-path` option to include the path for the node binary npm was executed with.
7 silly lifecycle base-prep@1.0.0~prestart: no script for prestart, continuing
8 info lifecycle base-prep@1.0.0~start: base-prep@1.0.0
9 verbose lifecycle base-prep@1.0.0~start: unsafe-perm in lifecycle true
10 verbose lifecycle base-prep@1.0.0~start: PATH: /usr/lib/node_modules/npm/bin/node-gyp-bin:/var/www/html/node_modules/.bin
11 verbose lifecycle base-prep@1.0.0~start: CWD: /var/www/html
12 silly lifecycle base-prep@1.0.0~start: Args: [ '-c', 'gulp serve' ]
13 info lifecycle base-prep@1.0.0~start: Failed to exec start script
14 verbose stack Error: base-prep@1.0.0 start: `gulp serve`
14 verbose stack spawn sh ENOENT
14 verbose stack at exports._errnoException (util.js:1023:11)
14 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
14 verbose stack at onErrorNT (internal/child_process.js:359:16)
14 verbose stack at _combinedTickCallback (internal/process/next_tick.js:74:11)
14 verbose stack at process._tickCallback (internal/process/next_tick.js:98:9)
15 verbose pkgid base-prep@1.0.0
16 verbose cwd /var/www/html
17 error Linux 4.8.6-x86_64-linode78
18 error argv "/usr/bin/nodejs" "/usr/bin/npm" "start"
19 error node v7.5.0
20 error npm v4.1.2
21 error file sh
22 error path sh
23 error code ELIFECYCLE
24 error errno ENOENT
25 error syscall spawn sh
26 error base-prep@1.0.0 start: `gulp serve`
26 error spawn sh ENOENT
27 error Failed at the base-prep@1.0.0 start script 'gulp serve'.
27 error Make sure you have the latest version of node.js and npm installed.
27 error If you do, this is most likely a problem with the base-prep package,
27 error not with npm itself.
27 error Tell the author that this fails on your system:
27 error gulp serve
27 error You can get information on how to open an issue for this project with:
27 error npm bugs base-prep
27 error Or if that isn't available, you can get their info via:
27 error npm owner ls base-prep
27 error There is likely additional logging output above.
28 verbose exit [ 1, true ]
答案 0 :(得分:1)
首先保存您要在文件中运行的脚本,例如compile.sh
。为脚本提供正确的运行权限,例如chmod 755 compile.sh
。
然后,在PHP脚本中添加以下内容:
<?php
// allow script to run for up to 10 minutes
set_time_limit(600); // seconds
// output of script will be saved in $output
$output = shell_exec('./compile.sh');
// display $output
echo $output;
这应该足以让您使用PHP运行脚本。
您可能需要使用绝对路径引用npm
和任何目录。通过命令行运行which npm
以获取要使用的完整路径。通过命令行运行脚本以确保它正常工作。