Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 无法在Assetic配置中覆盖NodeJS二进制文件的路径_Symfony_Assetic_Symfony 3.3 - Fatal编程技术网

Symfony 无法在Assetic配置中覆盖NodeJS二进制文件的路径

Symfony 无法在Assetic配置中覆盖NodeJS二进制文件的路径,symfony,assetic,symfony-3.3,Symfony,Assetic,Symfony 3.3,我在重写Assetic中UglifyCSS过滤器使用的Node.js二进制文件的路径时遇到问题。假设可以在/app/config/config.yml(,)中设置路径,但无论我将覆盖的值放在何处,它似乎都没有任何效果 为了调试它,我更改了供应商/kriswallsmith/assetic/src/assetic/Filter/UglifyCssFilter.php中的第37-39行,以输出值: /** * @param string $uglifycssBin Absolute path to

我在重写Assetic中UglifyCSS过滤器使用的Node.js二进制文件的路径时遇到问题。假设可以在
/app/config/config.yml
(,)中设置路径,但无论我将覆盖的值放在何处,它似乎都没有任何效果

为了调试它,我更改了供应商/kriswallsmith/assetic/src/assetic/Filter/UglifyCssFilter.php中的第37-39行,以输出值:

/**
 * @param string $uglifycssBin Absolute path to the uglifycss executable
 * @param string $nodeBin      Absolute path to the folder containg node.js executable
 */
public function __construct($uglifycssBin = '/usr/bin/uglifycss', $nodeBin = null)
{
        throw new \RuntimeException('Path to node executable '. $nodeBin . ' Uglify executable '. $uglifycssBin . "\n\$PATH: ". getenv('PATH'));
结果如下

$ ../bin/console assetic:dump --env=prod

                                                                                                                                                                                
  [RuntimeException]                                                                                                                                                            
  Path to node executable /usr/local/bin/node Uglify executable /home/myuser/dev/ptflow-api/app/../node_modules/.bin/uglifycss                                                
  $PATH: /home/myuser/.sdkman/candidates/java/current/bin:/home/myuser/go/bin:/home/myuser/.local/bin:/home/myuser/bin/Telegram:/home/myuser/.yarn/bin:/home/carleri  
  k/.config/yarn/global/node_modules/.bin:/home/myuser/bin:/home/myuser/.yarn/bin:/home/myuser/.config/yarn/global/node_modules/.bin:/home/myuser/go/bin:/home/carleri  
  k/.go/bin:/home/myuser/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin                                        
                                                                                                                                                                                
这表明
$nodeBin
始终具有值
/usr/local/bin/node
。这在我的系统上实际上是正确的路径,但我需要能够手动设置它,使其在没有找到正确可执行文件的Docker容器中工作

到目前为止,我看到的示例配置在使用参数路径
assetic.node
还是
assetic.node.bin
方面有所不同,但除了
assetic.filters.uglifycss.node
之外,我还设置了这两个参数:

assetic:
    node: /not/a/path/config.yml/node
        bin: '/usr/bin/node'
我还发现了一个文件,它似乎提供了一些见解:

$ cat ./vendor/symfony/assetic-bundle/Resources/config/filters/uglifycss.xml 
<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <parameters>
        <parameter key="assetic.filter.uglifycss.class">Assetic\Filter\UglifyCssFilter</parameter>
        <parameter key="assetic.filter.uglifycss.bin">/usr/bin/uglifycss</parameter>
        <parameter key="assetic.filter.uglifycss.node">%assetic.node.bin%</parameter>
        <parameter key="assetic.filter.uglifycss.timeout">null</parameter>
        <parameter key="assetic.filter.uglifycss.node_paths">%assetic.node.paths%</parameter>
        <parameter key="assetic.filter.uglifycss.expand_vars">false</parameter>
        <parameter key="assetic.filter.uglifycss.ugly_comments">false</parameter>
        <parameter key="assetic.filter.uglifycss.cute_comments">false</parameter>
    </parameters>

    <services>
        <service id="assetic.filter.uglifycss" class="%assetic.filter.uglifycss.class%">
            <tag name="assetic.filter" alias="uglifycss" />
            <argument>%assetic.filter.uglifycss.bin%</argument>
            <argument>%assetic.filter.uglifycss.node%</argument>
            <call method="setTimeout"><argument>%assetic.filter.uglifycss.timeout%</argument></call>
            <call method="setNodePaths"><argument>%assetic.filter.uglifycss.node_paths%</argument></call>
            <call method="setExpandVars"><argument>%assetic.filter.uglifycss.expand_vars%</argument></call>
            <call method="setUglyComments"><argument>%assetic.filter.uglifycss.ugly_comments%</argument></call>
            <call method="setCuteComments"><argument>%assetic.filter.uglifycss.cute_comments%</argument></call>
        </service>
    </services>
</container>
$cat./vendor/symfony/assetic bundle/Resources/config/filters/uglifycss.xml
Assetic\Filter\UglifyCssFilter
/usr/bin/uglifycss
%assetic.node.bin%
无效的
%assetic.node.path%
假的
假的
假的
%资产.过滤器.垃圾箱%
%assetic.filter.uglifycss.node%
%assetic.filter.uglifycss.timeout%
%assetic.filter.uglifycss.node\u路径%
%assetic.filter.uglifycss.expand\u vars%
%assetic.filter.uglifycss.ught\u注释%
%assetic.filter.uglifycss.cute_comments%
这似乎表明设置
assetic.filter.uglifycss.node
assetic.node.bin
都应该有效。我也不知道。。。XML文件似乎描述了如何使用反射调用过滤器。我对PHP开发(NodeJS、Java、.NET后台)不是很精通,所以我不确定哪些代码会进一步使用它


我正在使用Symfony 3.3和Assetic 2.8捆绑包。

天哪,我讨厌这种非直观的设置。似乎不仅构建工件被缓存,配置值也被缓存!我通过将整个项目灰显为
/usr/local
,并在
/var/cache
中找到它的引用找到了答案

我必须删除缓存才能进行更改:

PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/myuser/dev/ptflow-api/vendor/symfony/monolog-bundle/DependencyInjection/Configuration.php on line 654
PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /home/myuser/dev/ptflow-api/vendor/symfony/monolog-bundle/DependencyInjection/Configuration.php on line 654

                                                                               
  [RuntimeException]                                                           
  Path to node executable /tmp/nodejs Uglify executable /home/myuser/dev/pt  
  flow-api/app/../node_modules/.bin/uglifycss                                  
  $PATH: /tmp:/usr/bin                                                         
                                                                               

assetic:dump [--forks FORKS] [--watch] [--force] [--period PERIOD] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command> [<write_to>]
PHP警告:count():参数必须是在第654行的/home/myuser/dev/ptflow api/vendor/symfony/monolog bundle/DependencyInjection/Configuration.PHP中实现可数的数组或对象
PHP警告:count():参数必须是在第654行的/home/myuser/dev/ptflow api/vendor/symfony/monolog bundle/DependencyInjection/Configuration.PHP中实现可计数的数组或对象
[运行时异常]
节点可执行文件/tmp/nodejs-Uglify-executable/home/myuser/dev/pt的路径
流程api/app/。/node_modules/.bin/uglifycss
$PATH:/tmp:/usr/bin
assetic:dump[--forks-forks][--watch][--force][--period-period][h |--help][q |--quiet][v | vv | vv | vvv |--verbose][--v |--version][--ansi][--no-ansi][--n |--no-interaction][e |--env-env][--
Symfony配置中的实际配置路径不是
assetic.node.bin
,而是
assetic.node
。过滤器也是如此