2012-07-03 52 views
12

在我的Symfony2項目中,我有一些javascript依賴關係,並且將它們與php依賴項一起管理會很好。現在,我將它們添加到DEPS文件,PHP依賴一起,並創建一個符號鏈接到Web目錄,例如:如何在symfony2項目中安裝/更新javascript供應商?

//deps 
[knockout-js] 
    git=git://github.com/SteveSanderson/knockout.git 

的問題是,JavaScript庫(大部分),需要從幾個編譯文件合併爲一個。所以在安裝/更新供應商之後,我需要手動運行編譯腳本。據我所知,bin/vendors腳本不支持前/後更新鉤子,這可以解決這個問題。

不管怎樣,你如何處理你的項目中的JavaScript供應商的更新?

回答

8

可能有票友方式......但我只是用路徑在我的基礎模板,像這樣:

{% javascripts 
    filter='yui_js' 

    '../vendor/twitter/bootstrap/js/bootstrap-tab.js' 
    '../vendor/harvesthq/chosen/coffee/lib/select-parser.coffee' 
    '../vendor/harvesthq/chosen/coffee/lib/abstract-chosen.coffee' 
    '../vendor/harvesthq/chosen/coffee/chosen.jquery.coffee' 

    '@SOTBCoreBundle/Resources/public/js/script.js' 
%} 
    <script src="{{ asset_url }}"></script> 
{% endjavascripts %} 
+0

這與我的問題 – Dziamid

+1

沒有關係麼?你問過如何在你的項目中包含供應商的JavaScript。這就是我的做法......資產處理咖啡和較少文件的編譯。 – MDrollette

+1

問題是關於安裝/更新JavaScript供應商庫。 – Dziamid

5

作曲者可以用來管理JavaScript的依賴關係爲好。默認情況下,composer只使用一個名爲Packagist的存儲庫,它只是一個PHP庫的存儲庫。但是,如建議here,您可以添加您自己的JavaScript(或任何其他)庫的存儲庫。

這裏是我的composer.json,增加了一個自定義的淘汰賽-JS庫:

{ 
    "require": { 
     "php": ">=5.3.2", 
     "symfony/symfony": ">=2.0.10,<2.1.0-dev", 
     "doctrine/orm": ">=2.1.0,<2.2.0-dev", 
     "twig/extensions": "*", 

     "symfony/assetic-bundle": "2.0.*", 
     "sensio/generator-bundle": "2.0.*", 
     "sensio/framework-extra-bundle": "2.0.*", 
     "sensio/distribution-bundle": "2.0.*", 
     "jms/security-extra-bundle": "1.0.*", 
     "knockout/knockout-js": "2.1.0" 
    }, 

    "autoload": { 
     "psr-0": { 
      "Acme": "src/" 
     } 
    }, 

    "repositories": [ 
     { 
      "type": "package", 
      "package": { 
       "name": "knockout/knockout-js", 
       "version": "2.1.0", 
       "source": { 
        "type": "git", 
        "url": "https://github.com/SteveSanderson/knockout.git", 
        "reference": "v2.1.0" 
       } 
      } 
     }, 
     { 
      "type": "package", 
      "package": { 
       "name": "knockout/knockout-js", 
       "version": "2.0.0", 
       "source": { 
        "type": "git", 
        "url": "https://github.com/SteveSanderson/knockout.git", 
        "reference": "v2.0.0" 
       } 
      } 
     } 
    ] 

} 

庫由包(這是源庫版本的組合)。在這裏我有2個包(2.1.0,2.0.0),它們已經包含了knockout.js的預建源代碼,所以你不需要編譯任何東西。

現在,有些時候您可能想要編譯和使用最新的代碼。爲了實現這個例程的自動化,我想,可以使用git post-checkout鉤子。 添加一個新包,指的是最新的代碼:

{ 
     "type": "package", 
     "package": { 
      "name": "knockout/knockout-js", 
      "version": "master", 
      "source": { 
       "type": "git", 
       "url": "https://github.com/SteveSanderson/knockout.git", 
       "reference": "master" 
      } 
     } 
    } 

參考這個包中需要部分:

"knockout/knockout-js": "master" 

而且具有構建指令結賬後掛機。對於knockout.js很簡單:

// vendor/knockout/knockout-js/.git/hooks/post-checkout 

#!/bin/sh 

echo "Building knockout.js"; 
`cd build && ./build-linux`; 
2

如果由於某種原因,你不想使用assetic捆綁,你可以設置你DEPS(作曲家)的JavaScript廠商加載到某個文件夾web目錄下。

This post描述瞭如何使用deps文件來完成此操作。和this post - 如何通過作曲家做到這一點。