2012-07-03 27 views
12

Trong dự án Symfony2 của tôi, tôi có một số phụ thuộc javascript và sẽ rất tuyệt khi chúng được quản lý cùng với các phụ thuộc php. Ngay bây giờ tôi đang thêm chúng vào tập tin DEPS cùng với sự phụ thuộc php và tạo ra một liên kết tượng trưng đến dir web, ví dụ:Làm thế nào để cài đặt/cập nhật các nhà cung cấp javascript trong dự án symfony2?

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

Vấn đề là javascript thư viện (hầu hết trong số họ) cần phải được biên soạn từ nhiều các tệp thành một. Vì vậy, sau khi cài đặt/cập nhật các nhà cung cấp, tôi cần phải chạy và chạy các tập lệnh biên dịch bằng tay. Theo như tôi biết, tập lệnh bin/vendor không hỗ trợ các móc cập nhật trước/sau, điều này sẽ giải quyết được vấn đề này.

Dù sao, làm thế nào để bạn tiếp cận cập nhật của các nhà cung cấp javascript trong các dự án của bạn?

Trả lời

8

Có thể có cách fancier ... nhưng tôi chỉ sử dụng các đường dẫn trong mẫu cơ sở của tôi như vậy:

{% 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

Điều này không liên quan đến câu hỏi của tôi – Dziamid

+1

như thế nào? Bạn đã hỏi cách bao gồm nhà cung cấp javascript trong dự án của bạn. Đây là cách tôi làm điều đó ... assetic xử lý việc biên dịch cà phê và ít tập tin hơn. – MDrollette

+1

Câu hỏi đặt ra là cài đặt/cập nhật thư viện của nhà cung cấp javascript. – Dziamid

5

Composer thể được sử dụng để quản lý javascript phụ thuộc nào là tốt. Theo nhà soạn nhạc mặc định chỉ sử dụng một kho lưu trữ được gọi là Packagist, đây là kho lưu trữ cho các thư viện PHP. Tuy nhiên, theo đề xuất here, bạn có thể thêm kho lưu trữ của riêng mình cho thư viện javascript (hoặc bất kỳ thư viện nào khác).

Dưới đây là composer.json tôi có thêm một kho lưu trữ knock-out-js tùy chỉnh:

{ 
    "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" 
       } 
      } 
     } 
    ] 

} 

Repository bao gồm các gói (đó là sự kết hợp của nguồn và phiên bản của thư viện). Ở đây tôi có 2 gói (2.1.0, 2.0.0) đã chứa sẵn nguồn knockout.js, vì vậy bạn không phải biên dịch bất cứ thứ gì.

Bây giờ, có những lúc bạn có thể muốn biên dịch và sử dụng mã mới nhất. Để tự động hóa thói quen này, tôi đã tìm ra, người ta có thể sử dụng git post-checkout hook. Thêm một gói mới mà đề cập đến mã mới nhất:

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

tham khảo gói này trong yêu cầu phần:

"knockout/knockout-js": "master" 

Và một cái móc hậu kiểm với xây dựng hướng dẫn. Đối với knockout.js nó rất đơn giản:

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

#!/bin/sh 

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

Nếu vì một số lý do bạn không muốn sử dụng assetic bó bạn có thể thiết lập DEPS của bạn (nhà soạn nhạc) để tải các nhà cung cấp javascript vào một số thư mục dưới web thư mục.

This post mô tả cách thực hiện bằng cách sử dụng deps tệp. Và this post - cách thực hiện thông qua nhà soạn nhạc.

Các vấn đề liên quan