symfony2.3用less配置assetic

时间:2013-11-26 13:20:49

标签: node.js configuration less symfony-2.3 assetic

我正在使用Symfony“2.3。*”,我尝试使资产更少的过滤器工作。 我在“开发”环境中做了所有这些。

当我发出config:dump-reference assetic时,我得到以下输出:

assetic:
    debug:                %kernel.debug%
    use_controller:
        enabled:              %kernel.debug%
        profiler:             false
    read_from:            %kernel.root_dir%/../web
    write_to:             %assetic.read_from%
    java:                 /usr/bin/java
    node:                 /usr/bin/node
    node_paths:           []
    ruby:                 /usr/bin/ruby
    sass:                 /usr/bin/sass
    variables:
        # Prototype
        name:                 []
    bundles:
        # Defaults:
        - FrameworkBundle
        - SecurityBundle
        - TwigBundle
        - MonologBundle
        - SwiftmailerBundle
        - AsseticBundle
        - DoctrineBundle
        - SensioFrameworkExtraBundle
        - FOSUserBundle
        - JMSSerializerBundle
        - YuccaPrerenderBundle
        - WebProfilerBundle
        - SensioDistributionBundle
        - SensioGeneratorBundle
    assets:
        # Prototype
        name:
            inputs:               []
            filters:              []
            options:

                # Prototype
                name:                 []
    filters:
        # Prototype
        name:                 []
    twig:
        functions:

            # Prototype
            name:                 []

所以,我的配置如下:

assetic:
    debug:          %kernel.debug%
    use_controller: false
    bundles:
      - PlastoriaGiftoFrontBundle
    #java: /usr/bin/java
    node: "/usr/bin/nodejs"
    node_paths: [ "/home/webadmin/websites/gifto/node_modules" ]
    filters:
        cssrewrite: ~
        less: ~
        closure:
            jar: %kernel.root_dir%/Resources/java/compiler.jar
        yui_css:
            jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.8.jar

为了测试它是否有效,我打开Symfony控制台并发出cache:clear 然后我转到缓存目录(app / cache)并执行rm -rf *。 在我回到Symfony控制台并启动这两个命令之后:

assets:install
assetic:dump

我收到以下消息:

  

转储所有开发资产。调试模式已打开。 13:51:22 [档案+]   /home/webadmin/websites/gifto/app/../web/css/ac28136.css   [Assetic \ Exception \ FilterException]运行时发生错误:   '/ usr / bin / nodejs''/ tmp / assetic_lessjHtxDR'错误输出:   module.js:340        扔错了;              ^错误:找不到'less'模块        在Function.Module._resolveFilename(module.js:338:15)...(截断)

考虑节点二进制文件的配置:An error occurred while running: '/usr/bin/nodejs'

默认情况下,值为/usr/bin/nodejs

我无法弄清楚出了什么问题。使用 npm 在应用程序中安装“less”节点模块,并在发出npm ls时,我看到它已正确安装。

我还在应用程序目录中启动了 nodejs 并执行了require('less')并且它没有错误地工作。

使用nodejs配置资产的正确方法是什么?

4 个答案:

答案 0 :(得分:3)

对于mac用户,这是

node: "/usr/local/bin/node"
node_paths: [/usr/local/lib/node_modules/]

答案 1 :(得分:2)

添加

assetic:
   node_paths:           [/usr/lib/node_modules/]
在config.yml文件中。

/usr/lib/node_modules/适用于Ubuntu。

答案 2 :(得分:1)

我正在使用带有cPanel安装的Centos。我犯了一个错误,当你运行npm install时没有意识到它会出现在我调用的目录中,在我的情况下是我的项目根目录。

当您安装较少的node_modules文件夹时,您所在的目录应该在那里。然而,这是错误的位置。

假设您在同一目录中运行安装...运行此命令将其移动到正确的位置

mv node_modules /usr/local/lib/node_modules

然后你需要在config.yml

中添加一行
assetic:
    debug:          '%kernel.debug%'
    use_controller: '%kernel.debug%'
    filters:
        cssrewrite: ~
        uglifyjs2:
            # the path to the uglifyjs executable
            bin: /usr/bin/uglifyjs
        uglifycss:
            bin: /usr/bin/uglifycss
        less: 
            node_paths: [/usr/local/lib/node_modules/]
            bin: /usr/bin/less

在我的情况下,我使用了很多其他过滤器,但这里的关键是node_paths: [/usr/local/lib/node_modules/],请确保您拥有该过滤器。请注意,现在设置为脚本可以全局访问的位置。

现在它会起作用。希望这有助于某人。

答案 3 :(得分:0)

实测值,

我作为 root 进入服务器(是的,我知道,不好的做法)然后我su webadmin

诀窍是真正以 webadmin su webadmin -l登录。

我测试了,这是问题。