【问题标题】:Symfony2 Assetic: Path to node executable could not be resolvedSymfony2 Assetic:无法解析节点可执行文件的路径
【发布时间】:2014-04-07 12:54:13
【问题描述】:

运行 app/console assetic:dump 时,我得到:

无法解析节点可执行文件的路径

这是什么意思以及如何解决这个问题?

尝试通过 app_dev.php 浏览项目时,当浏览器尝试下载 css 和 js 文件时出现 HTTP 500 错误。

【问题讨论】:

  • 你是否在使用需要像 uglify 这样的 node.js 的资产过滤器?

标签: symfony assetic


【解决方案1】:

首先确保您已安装节点并找到节点的路径。您通常可以使用which node 找到它,它会返回类似/usr/local/bin/node 的内容。如果它返回类似/usr/bin/which: no node in ... 的内容,则需要安装节点。

接下来配置symfony。打开您的 config.yml (./app/config/config.yml) 和指向您资产配置的节点路径,即:

# app/config/config.yml
assetic:
    node: /usr/local/bin/node

【讨论】:

  • 详细说明我将节点更改为 /usr/bin/nodejs 并且它对我有用。
  • 在我的情况下是`/usr/bin/node'
【解决方案2】:

这对我有用

sudo apt-get remove nodejs
sudo apt-get remove npm

sudo curl -sL https://deb.nodesource.com/setup | sudo bash -

sudo apt-get install nodejs

【讨论】:

    【解决方案3】:

    我在做的时候添加了完全相同的错误

    php app/console assetic:dump --env=prod
    

    在 Ubuntu 上,node 和 nodejs 二进制文件之间存在混淆。 要解决这个问题,您需要安装节点二进制文件。 在我的情况下,二进制文件是 nodejs,所以它不起作用。

    在 Ubuntu 上,which node 命令会告诉你是否安装了节点。 试试which node,如果不行,试试which nodejs

    所以为了确保我没有混淆:

        sudo apt-get remove nodejs
        curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
        sudo apt-get install -y nodejs
    

    检查 node website 以获取 curl 命令中的正确 url。您可能需要节点 5.X。

    当你这样做时

    which node
    /usr/bin/node
    

    您有正确的二进制名称(node 而不是 nodejs)。

    在此之后它应该可以工作。如果不检查 config.yml 中的节点路径(检查 config_prod 和 config_dev 中没有其他声明)

    【讨论】:

      【解决方案4】:

      我发现,即使您在 config.yml 中指定 /usr/bin/node,您仍然可能会发现 Assetic 正在尝试使用 /usr/local/bin/node

      解决这个问题的快速而肮脏的方法是:

      ln -sf /usr/bin/node /usr/local/bin/node
      

      如有疑问,请暂时编辑vendor/kriswallsmith/assetic/src/Assetic/Filter/UglifyJs2Filter.php

      在第 136 行附近编辑:

              if (127 === $code) {
                  throw new \RuntimeException('Path to node executable could not be resolved.');
              } 
      

      ->

              if (127 === $code) {
                  throw new \RuntimeException('Path to node executable could not be resolved.' . $this->nodeBin);
              }
      

      这将告诉您assetic 预计下次assetic 失败时节点在哪里。

      我发现在我的设置中,assetic 被配置为在 dev 模式下查看 /usr/local/bin,但在 prod 模式下查看 /usr/bin。 所以值得检查config.ymlconfig_dev.ymlconfig_prod.yml

      【讨论】:

      • 又快又脏,但它让我又开始了。谢谢!
      【解决方案5】:

      您是否使用了一些过滤器,例如 uglify ?

      如果是这种情况,Assetic 会引发此错误,因为进程存在代码 127,这意味着节点可执行文件无法运行。

      检查config.yml 中的路径:

      # app/config/config.yml
      assetic:
          filters:
              uglifyjs2:
                  bin: /path/to/uglifyjs
      

      并确保它是可执行的:

      chmod +x /path/to/uglifyjs
      

      【讨论】:

      • 你的答案对我有用,但它需要一些额外的更正。我们必须通过键入“which uglifycss”“which uglifyjs”来学习 uglifyjs 和 uglifycss 文件的路径,并将其写入 config_dev.yml 和 config.yml 文件
      【解决方案6】:

      只需更新作曲家(php composer.phar 更新),然后尝试转储您的资产。 第一次可能无法正常工作,请再次更新作曲家。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-20
        • 2018-07-30
        • 2013-11-12
        • 1970-01-01
        • 2012-12-04
        • 2017-02-01
        • 2014-11-24
        • 1970-01-01
        相关资源
        最近更新 更多