【问题标题】:Execute "npm" from Laravel application in Laravel Forge-Setup在 Laravel Forge-Setup 中从 Laravel 应用程序执行“npm”
【发布时间】:2020-11-07 18:49:09
【问题描述】:

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

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

现在,今天,我将该工具推广到由 Laravel Forge 管理的 DigitalOcean-Server。现在,NPM-command 的执行不再起作用了。相反,我在运行 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 在这里运行?

(production 是此命令的别名: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 工作正常。结果在意料之中。但是运行 yarn run development 会出现以下错误:

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 中执行的。但两者都是用户forge

【问题讨论】:

  • 您是否尝试删除您的 node_modules/ 和 yarn.lock/package-lock.json 文件并重新运行 npm install?

标签: node.js laravel npm digital-ocean laravel-forge


【解决方案1】:

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

其中一个问题是几年前关于shell_execnpm 的问题,解决方案是$PATH 在作为npm 脚本调用时不包含/bin,因此无法找到/bin/sh根据error file sh(不是我的话,请参阅the original question)。他们的解决方案是将/bin/sh 符号链接到/usr/bin/sh

ln -s /bin/sh /usr/bin/sh

另一种解决方案可能是使用 Symony 的Process

use Symfony\Component\Process\Process;

(new Process(['npm', 'run', 'production'], base_path()))
    ->setTimeout(null)
    ->run(function ($type, $output) {
        $this->output->write($output);
    });

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

【讨论】:

    猜你喜欢
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2021-03-13
    • 2020-08-13
    • 2022-12-23
    • 2019-02-23
    • 1970-01-01
    相关资源
    最近更新 更多