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

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

你是否在使用需要像 uglify 这样的 node.js 的资产过滤器? 【参考方案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 更新),然后尝试转储您的资产。 第一次可能无法正常工作,请再次更新作曲家。

【讨论】:

以上是关于Symfony2 Assetic:无法解析节点可执行文件的路径的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Assetic + sass 在 Windows 中与 Symfony2 一起工作?

Symfony2 - Assetic - css 字体图标

使用 Assetic / Twig / Symfony2,我可以定义前端库吗?

Symfony2 Assetic + Twig 模板 JavaScript 继承

Symfony2 - Assetic - 在 CSS 中加载图像

在 Symfony2 中使用 Compass 和 Assetic 的 Foundation5