Trình quản lý gói: Bower vs jspm


Câu trả lời:


100

Vâng, JSPM là một dự án lớn hơn và đầy tham vọng hơn nhiều so với Bower. Bower chỉ có một mục đích duy nhất là tải các tệp nguồn bạn cần từ web vào đĩa cứng của bạn. Đối với bạn là một người tiêu dùng, bower không làm bất cứ điều gì khác. Nếu bạn muốn thực thi các tệp tập lệnh từ bower, bạn cần tạo các thẻ tập lệnh của mình cho từng tệp đó.

Trong khi jspm không chỉ là một trình tải xuống mô-đun. Nó tải xuống theo hệ thống mặc định mà bạn đã đề cập. SystemJS được triển khai gần với https://whatwg.github.io/loader/ nhất có thể. Trên thực tế, tác giả của JSPM là người tham gia rất tích cực vào quá trình đặc tả. Với systemjs, ngày nay bạn có thể tải ES6 (bằng cách chuyển đổi chúng trong trình duyệt), CommonJS hoặc các mô-đun AMD trong trình duyệt mà không cần xây dựng chúng. Không chỉ các mô-đun ES6, mà tất cả các tính năng khác của ES6 được hỗ trợ bởi traceur / babeljs / stylescript. Tùy thuộc vào trình biên dịch mà bạn chọn khi chạy jspm init. SystemJS hoạt động 1: 1 trong node.js cũng như trong trình duyệt, vì vậy việc kiểm tra đơn vị ứng dụng của bạn có thể dễ dàng thực hiện.

Ngoài ra, nó có thể xây dựng gói cho bạn ( jspm build) khi bạn cần đi vào sản xuất. Vì vậy, rõ ràng jspm (+ systemjs) là một công cụ mạnh hơn. Vì vậy, theo quy tắc chung:

  • cần nhanh chóng tải jquery và đưa nó vào html tạo mẫu bên máy chủ của bạn? Đi với thẻ script thông thường. Bower đã không được dùng nữa.
  • cần xây dựng ứng dụng JS lớn? Đi với Webpack. JSPM đã không đạt được khối lượng lớn và tất cả mọi người đang làm webpack bây giờ.

Nói chính xác hơn một chút, bản thân SystemJS sử dụng miếng đệm mô-đun ES6 nên nếu bạn chỉ cần hỗ trợ mô-đun ES6, bạn có thể bỏ qua SJS (trừ khi bạn muốn một số tính năng khác của nó).
ShawnFumo

@Capaj, tôi rất bị hấp dẫn bởi SystemJS nhưng nó dường như không có động lực mà nó nên làm. Một số công cụ khác (có thể có Webpack?) Cũng cung cấp tính năng xây dựng như một tính năng tùy chọn? Mục tiêu chính của tôi là sử dụng cú pháp mô-đun ES6 và nút shim và các trình duyệt để xử lý nó. Mục tiêu phụ: rằng tính năng xây dựng được cung cấp là tùy chọn. Thứ ba: hỗ trợ cho sự tuyệt vời trong tương lai này: 2ality.com/2013/11/es6-modules-b browser.html
Jon Coombs

8
" Bower chỉ có một mục đích duy nhất là tải các tệp nguồn bạn cần từ web xuống đĩa cứng " . Đó là lý do tại sao nó thực sự tốt vì nó chỉ thực hiện một công việc.
tugberk

2
@tugberk vâng, nhưng công việc của chúng tôi với tư cách là nhà phát triển web không kết thúc ở đó, phải không? Chúng tôi cần tải thư viện của bên thứ 3 đó và sử dụng nó. Đó là nơi JSPM vượt trội và đánh bại tất cả các lựa chọn thay thế khác. Đặc biệt là webpack phổ biến nhất.
Capaj

64

Để thêm vào câu trả lời của Capaj:

Nếu bạn có một dự án nhỏ, hãy sử dụng jspm! Đó là tương lai! (Ai mà biết được, mọi thứ thay đổi, nhưng đây là một cuộc cá cược tốt).

Sử dụng dự án nhỏ:

$ jspm install jquery

thì trong HTML của bạn:

    <script src="jspm_packages/system.js"></script><!-- required -->
    <script src='config.js'></script><!-- required -->
    <script type="module">
        System.import('path/to/your/main.js')
    </script>

thì trong main.js:

import $ from 'jquery'; // ES6-style import
// do whatever with jQuery here.

Bạn có thể sử dụng các định dạng mô-đun CommonJS, AMD hoặc ES 6. JSPM tự động phát hiện chúng trong tệp của bạn (mặc dù bạn không thể trộn và kết hợp trong cùng một tệp).

var $ = require('jquery'); // CommonJS-style import
// do whatever with jQuery here.
define(['jquery'], function($) { // AMD-style import
    // do whatever with jQuery here.
})

18
Trong khi tôi rất vui vì bạn rất nhiệt tình với jspm, tôi thực sự nghĩ rằng đối với những người cần thêm jquery vào tài liệu html, họ tốt hơn với các thẻ script thông thường.
Capaj

10
JQuery trong trường hợp này chỉ là một ví dụ nên tôi không nghĩ nhận xét của bạn là hợp lệ. Tôi phải nói rằng tôi thích năng lượng của câu trả lời - quá phấn khích và hạnh phúc, khiến tôi muốn sử dụng jspm ngay lập tức. :-)
Mladen Mihajlovic

2
Vấn đề là không phải vậy. Có, chúng ta có thể chỉ thêm jquery làm script. Nhưng điều hấp dẫn đến khi bạn có nhiều phụ thuộc mô-đun với các câu lệnh nhập vào JS. Sau đó, tất cả system.js được yêu cầu là định cấu hình các gói bằng config.js và đề cập đến các câu lệnh nhập trong chuỗi phụ thuộc javascript.
Joy

1
Tôi chỉ muốn nói thêm rằng đó var $ = require('jquery');là kiểu nhập CommonJS chứ không phải kiểu AMD .
Andreas Wahlqvist
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.