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.yml
、config_dev.yml
和config_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 一起工作?
使用 Assetic / Twig / Symfony2,我可以定义前端库吗?
Symfony2 Assetic + Twig 模板 JavaScript 继承