2012-04-14 26 views
9

Giả sử tôi có một phụ thuộc bên ngoài như Bootstrap. Tôi muốn nhập một số LESS từ đó, bởi vì theo cách đó tôi có thể sử dụng các mixin Bootstrap trong mã của tôi.Các phụ thuộc bên ngoài (như bootstrap) trong Meteor

Vì Meteor đã biên dịch và ghép tất cả các LESS trong cây của tôi (phải không?), Chỉ cần sao chép thư mục LESS và sau đó cập nhật thủ công một lần trong một thời gian không phải là giải pháp. Trong thực tế, với thư mục LESS mặc định, có vẻ như mọi tệp nguồn LESS sẽ xuất hiện trong đầu ra hai lần: một lần vì nó được nhập vào bootstrap.less, một lần do chính tệp đó.

Có cách nào để lấy sao băng để bỏ qua một số đường dẫn không? public/ âm thanh gần; nhưng tôi không thực sự muốn phục vụ repo bootstrap.

Ngoài ra, điều đó có thể khắc phục được LESS, nhưng cách thích hợp để xử lý các phần mở rộng JS trong bootstrap là gì?

Trả lời

3

Tôi đã tìm ra giải pháp tiềm năng. Meteor muốn bó tất cả mọi thứ trong thư mục của nó ... vì vậy hãy đặt sự phụ thuộc bên ngoài tầm với của nó :)

Với cấu trúc thư mục sau:

. 
|-- ext 
| `-- bootstrap 
`-- myapp 
    |-- .meteor 
    `-- ... 

Trong tập tin LESS của tôi, tôi làm như sau:

@BOOTSTRAP: "../../ext/bootstrap/less"; 
@import "@{BOOTSTRAP}/reset.less"; 

Điều này vẫn không hiệu quả, nhưng tôi nghĩ điều này có thể quy cho a LESS bug.

Đáng tiếc là các thông báo lỗi được sản xuất bởi Meteor là hoàn toàn vô dụng ở đây:

[[[[[ ~/Code/igl/igl ]]]]] 

Running on: http://localhost:3000/ 
Errors prevented startup: 
Exception while bundling application: 
ReferenceError: err is not defined 
    at /usr/local/meteor/packages/less/package.js:33:62 
    at [object Object].add_file (/usr/local/meteor/app/lib/bundler.js:193:5) 
    at /usr/local/meteor/app/lib/bundler.js:97:16 
    at Array.forEach (native) 
    at Function.<anonymous> (/usr/local/meteor/app/lib/third/underscore.js:76:11) 
    at /usr/local/meteor/app/lib/bundler.js:96:11 
    at Array.forEach (native) 
    at Function.<anonymous> (/usr/local/meteor/app/lib/third/underscore.js:76:11) 
    at Object.add_files (/usr/local/meteor/app/lib/bundler.js:95:9) 
    at [object Object].on_use (/usr/local/meteor/app/lib/packages.js:136:11) 
Your application is crashing. Waiting for file change. 
+1

FWIW Tôi chỉ kết thúc hack ở quanh đây: 'mèo PATH_TO_BOOTSTRAP/ít/* | grep -v nhập khẩu | egrep -v \^//> bootstrap-concat.less'.Ugly như tội lỗi, nhưng làm việc một sự quyến rũ và cho phép tôi nhập mọi thứ :) – lvh

+1

mới nhất của sao băng bao gồm một gói cho boostrap, không chắc chắn nếu điều đó sẽ giải quyết vấn đề của bạn, nhưng có khả năng nếu bạn làm một sao lưu cập nhật và sau đó meteor add boostrap bạn nên bây giờ có twitter boostrap trên ứng dụng của bạn. – climboid

+0

Lợi thế của việc sử dụng LESS là tùy biến dễ dàng - bạn có biết liệu gói khởi động Meteor có biên dịch động từ LESS không? –

0

Từ kinh nghiệm của tôi, đó là một ý tưởng tồi để trực tiếp bao gồm các tập tin Bootstrap LESS trong một dự án Meteor:

  • Nó sẽ làm cho môi trường phát triển của bạn chậm hơn rất nhiều, vì nhiều tệp phụ cần phải được Meteor chuyển đổi và được trình duyệt của bạn tải xuống.
  • Nó không đáp ứng phụ thuộc của gói bên thứ ba phụ thuộc rõ ràng vào gói khởi động lõi. Nếu bạn thêm một trong số đó, bạn sẽ kết thúc với hai bootstraps trong dự án của bạn.
  • Tài nguyên của các gói được tải sớm hơn so với tệp dự án. Nếu bạn có một gói khởi động mở rộng bên ngoài, kiểu dáng của nó sẽ được tải trước khi bootstrap.
  • Phải đổi tên tất cả các lần nhập để kết thúc bằng .lessimport khiến bạn khó cập nhật các bản phát hành khởi động mới hơn.
  • Thứ tự các tệp tin khởi động javascript được Meteor tải (theo thứ tự bảng chữ cái) không chính xác, dẫn đến lỗi Javascript chỉ có thể được sửa bằng cách đổi tên tệp.

Tôi đã tạo tập lệnh shell để tạo gói Meteor khởi động tùy chỉnh từ bản phân phối được biên dịch trước hoặc bản sao của riêng bạn trong kho lưu trữ Bootstrap Git.

Bạn có thể tìm thấy nó ở đây, cùng với thông tin sử dụng: https://github.com/wojas/meteor-package-bootstrap

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