2014-06-12 18 views
15

Tôi đang sử dụng browserify để đóng gói mã front-end. Nó đã được tuyệt vời cho đến nay, nhưng tôi đã gặp khó khăn khi trộn các gói npm và non npm. Ví dụ, sử dụng phiên bản npm của jQuery với các phiên bản không phải CJS của các plugin jQuery.Sử dụng browserify với npm jQuery và các plugin không phải của npm

Giải pháp hiện tại của tôi là sử dụng khóa browser trong package.json để trỏ đến vùng của jQuery và sau đó sử dụng browserify-shim để thêm nó làm phụ thuộc của các plugin.

Có cách nào sạch hơn để làm điều này hơn những gì tôi hiện có không?

Edit: tôi đang cố gắng sử dụng NPM và package.json để quản lý tất cả phụ thuộc của tôi, vì vậy tôi không muốn sử dụng Chòi chơi cho dự án này. Hãy gọi cho tôi điên:)

Package.json

"dependencies": { 
    "jquery": "~2.1.0", 
    "browserify": "latest", 
    "browserify-shim": "^3.5.0", 
    "jquery-waypoints": "[email protected]:imakewebthings/jquery-waypoints.git", 
    "jquery-validation": "git://github.com/jzaefferer/jquery-validation" 
    }, 
    "browser": { 
    "jquery": "./node_modules/jquery/dist/jquery.js", 
    "jquery-waypoints": "./node_modules/jquery-waypoints/waypoints.js", 
    "jquery-validate": "./node_modules/jquery-validation/build/release.js" 
    }, 
    "browserify-shim": { 
    "jquery": "$", 
    "jquery-waypoints": { 
     "depends": [ 
     "jquery" 
     ] 
    }, 
    "jquery-validate": { 
     "depends": [ 
     "jquery" 
     ] 
    } 
    }, 
    "browserify": { 
    "transform": [ 
     "browserify-shim" 
    ] 
    } 
+0

Tôi đang giải quyết cùng một vấn đề hiện tại. Có răng cưa 'jquery' với'./Node_modules/jquery/dist/jquery.js' tạo một bản sao của jQuery trong gói cuối cùng của bạn không? Hoặc, cái gì không làm việc với 'package.json' đó? –

+0

@ MichaelMartin-Smucker Nó hoạt động tốt (không có bản sao 'jquery') nhưng tôi không thích phải cấu hình mọi thứ bằng tay thông qua cấu hình shim - Tôi lười biếng :). Chúc may mắn! –

+0

Cảm ơn bạn! Câu hỏi đó trả lời câu hỏi của tôi. Tôi không thể nhận được jquery.mmenu để làm việc, nhưng mã của bạn chỉ cho tôi cách. 1 cho hiển thị mã làm việc trong một câu hỏi :) – xlttj

Trả lời

1

tôi sẽ làm như sau:

  1. Sử dụng debowerify để bao gồm các thư viện có sẵn trong lùm cây, trong trường hợp của bạn sẽ được, jquery các điểm, xác nhận jquery

  2. Sử dụng jquery có trong gói npm, có sẵn tại đây https://github.com/jquery/jquery

Như vậy, tôi cũng sẽ xóa browserify-shim trong thời gian này.

+0

Cảm ơn câu trả lời của bạn. Tôi đang cố gắng đi tuyến đường npm chỉ vào lúc này, vì vậy tôi muốn tránh sử dụng bower. Tôi đã cập nhật câu hỏi của mình để làm rõ. –

+0

Tôi đã thử cách đề xuất và không may mắn với jquery-mobile. Debowerify mang trong gói từ bower nhưng deamdify không biết làm thế nào để xây dựng nó ra khỏi một mô-đun amd. Đã xảy ra lỗi mã thông báo không mong muốn. Hmmm ... – Glitches

0

Bạn đang thiếu định phụ thuộc một cách chính xác tôi tin rằng (ví dụ thiết lập "$" để khai jquery của bạn):

"plugin": { 
    "exports": "plugin", 
    "depends": [ 
    "jquery:$" 
    ] 
},... 
+0

Cảm ơn câu trả lời của bạn, nhưng tôi không hoàn toàn chắc chắn ý bạn là gì? Bạn có thể xây dựng và cung cấp thêm một chút ngữ cảnh cho đoạn mã của mình không? –

+0

Erk. Vượt qua câu hỏi của bạn trong khi tìm kiếm một giải pháp khác để đọc quá nhanh. Chỉ cần đọc lại câu hỏi của bạn và nhận thấy rằng bạn thực sự có nó hoạt động, nhưng không thích hướng dẫn sử dụng thông qua browserify-shim (tôi đã giả định rằng nó không hoạt động, có khả năng vì bạn đã không chỉ định đầy đủ những gì để gán cho $/jQuery trong plugin của bạn Nhìn thấy như thế nào bạn có nó làm việc, bạn đang ở trong cùng một thuyền như tôi: "argh, một plugin jQuery mà tôi đã có để làm cho trình duyệt thân thiện." Thật không may, không có cách nào khác Tôi đã tìm thấy viết tắt của việc sử dụng một trình quản lý gói khác nhau – Ted

+0

Gotcha.Điều đó có ý nghĩa. Vui mừng khi biết một người nào khác cảm thấy nỗi đau của tôi Vui lòng cập nhật nếu bạn tìm thấy một cách tốt hơn :) –

1

Chỉ thị browser chỉ là một bí danh để xác định những gì bạn muốn khi bạn viết jquery. Các mặc định cho jquery là con đường trong node_modules, vì vậy dòng của bạn:

"jquery": "./node_modules/jquery/dist/jquery.js", 

... là không cần thiết và bạn có thể gỡ bỏ nó, bởi vì khi bạn viết "depends": ["jquery"] trong cấu hình Browserify Shim của bạn, jquery đã chỉ ra ./node_modules/jquery/dist/jquery.js không có dòng đó trong khóa browser của bạn. Trong thực tế, bạn có thể xóa hoàn toàn chỉ thị browser, bạn phải kiểm tra cấu hình trong các tệp package.json của các plugin jQuery nhưng hầu hết chúng đều đã được đặt bí danh như bạn có chúng, không có ghi đè browser.

Nếu không, tôi không nghĩ rằng có một cách sạch hơn để thực hiện việc này. Như bạn đã nói, bạn cần sử dụng Browserify Shim để làm hỏng các plugin jQuery không phải của CJS và bạn đang làm đúng cách.

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