从Laravel Forge-Setup中的Laravel应用程序执行“ npm”

问题描述

我开发了一个工具,该工具生成一个scss文件,运行npm run prod并将生成的app.css上载到服务器。

在本地这没问题。我只运行了shell_exec('npm run production'),它就成功了。

现在,今天,我将该工具推广到Laravel Forge管理的DigitalOcean-Server。现在,NPM命令的执行不再起作用。相反,我在运行npm run production时看到此错误:

ERR! file sh
npm ERR! path sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm 

当我现在将脚本更改为npm -v时,我看到了:

6.9.0

有人知道,如何在这里运行NPM吗?

(生产是此命令的别名:cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js

更新

现在,我尝试使用毛线。运行yarn install效果很好。结果是预期的。但是运行纱线运行开发时会发生以下错误:

2020-11-07 20:03:55 STDOUT: yarn run v1.17.3
2020-11-07 20:03:55 STDOUT: $ npm run development
2020-11-07 20:03:55 STDERR: /bin/sh: 1: 
2020-11-07 20:03:55 STDERR: npm: not found
2020-11-07 20:03:55 STDERR: error Command failed with exit code 127.
2020-11-07 20:03:55 STDOUT: info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

如果我通过完全相同目录中的ssh手动运行yarn run development,一切正常。

更新2: 我想,也许是问题在于,Laravel是由SSH以外的其他用户执行的。但两者都是用户伪造

解决方法

我找到了两种可能的解决方案。

其中之一是几年前有关shell_execnpm的问题,其解决方案是$PATH在被称为npm脚本时不包括/bin因此它找不到每个/bin/sh的{​​{1}}(不是我的话,请参阅the original question)。他们的解决方案是将error file sh链接到/bin/sh

/usr/bin/sh

另一种解决方案可能是使用Symony的ln -s /bin/sh /usr/bin/sh

Process

这两种解决方案都未经测试,因为我目前无法访问DigitalOcean服务器或Laravel Forge帐户。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...