Менеджер пакетів: Bower проти jspm


Відповіді:


100

Ну JSPM - набагато масштабніший та амбітніший проект, ніж Bower. Bower має лише одну мету - завантажити потрібні вихідні файли з Інтернету на ваш жорсткий диск. Для вас, як споживача, компанія Bower більше нічого не робить. Якщо ви хочете виконувати файли скриптів з Bower, вам потрібно створити теги сценарію для кожного з них.

Хоча jspm - це не тільки модуль для завантаження. Він завантажує системні файли за замовчуванням, про які ви згадали. SystemJS реалізовано якомога ближче до https://whatwg.github.io/loader/ . Насправді автор JSPM є дуже активним учасником процесу специфікації. За допомогою systemjs сьогодні ви можете завантажувати модулі ES6 (переклавши їх у браузері), модулі CommonJS або AMD у браузер, не будуючи їх. Не тільки модулі ES6, але й усі інші функції ES6, що підтримуються traceur / babeljs / typecript. Залежно від того, який компілятор ви вибрали під час запуску jspm init. SystemJS працює у форматі 1: 1 як у node.js, так і в браузері, тому модульне тестування вашого додатка легко виконується.

Крім того, він може створити вам комплект ( jspm build), коли вам потрібно перейти на виробництво. Тож очевидно, що jspm (+ systemjs) є більш потужним інструментом. Отже, як правило:

  • потрібно швидко отримати jquery та включити його у свій серверний шаблонний html? Ідіть із звичайним тегом скрипта. Bower застаріла.
  • потрібно створити великий додаток JS? Ідіть із Webpack. JSPM не досяг критичної маси, і зараз усі роблять веб-пакет.

Щоб бути трохи точнішим, сам SystemJS використовує прокладку модуля ES6, тому якщо вам просто потрібна підтримка модуля ES6, ви можете пропустити SJS (якщо ви не хочете, щоб деякі інші функції, які він має).
ShawnFumo

@Capaj, мене дуже заінтригував SystemJS, але, схоже, він не має того імпульсу, який мав би бути. Чи деякі інші (можливо, Webpack?) Також передбачають будівництво як додаткову функцію? Моя головна мета - використовувати для його обробки синтаксис модуля ES6 та вузол шим та браузери. Вторинна мета: надана функція збірки є необов’язковою. По-третє: підтримка цієї майбутньої дивовижності: 2ality.com/2013/11/es6-modules-browsers.html
Джон Кумбс

8
" Bower має лише одну мету - завантажувати потрібні вихідні файли з Інтернету на ваш жорсткий диск ". Саме тому він справді хороший, оскільки виконує лише одну роботу.
буксир

2
@tugberk так, але наша робота веб-розробників на цьому не закінчується, правда? Нам потрібно завантажити цю сторонню бібліотеку та використовувати її. Саме тут JSPM перевершує та перевершує всі інші альтернативи. Особливо найпопулярніший веб-пакет.
Capaj

64

Щоб додати відповідь Капая:

Якщо у вас невеликий проект, все одно скористайтеся jspm! Це майбутнє! (хто знає, речі змінюються, але це хороша ставка).

Використання малого проекту:

$ jspm install jquery

то у вашому HTML:

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

то в main.js:

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

Ви можете використовувати формати модулів CommonJS, AMD або ES 6. JSPM автоматично виявляє їх у ваших файлах (хоча ви не можете змішувати та поєднувати в одному файлі).

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

18
Хоча я радий, що ви так захоплені jspm, я дійсно думаю, що для людей, яким потрібно додати jquery до html-документа, їм краще з нормальними тегами скриптів.
Capaj

10
JQuery у цьому випадку - лише приклад, тому я не думаю, що ваш коментар є дійсним. Потрібно сказати, що мені подобається енергія відповіді - така схвильована і щаслива, змушує мене негайно використовувати jspm. :-)
Младен Михайлович

2
Справа не в цьому. Так, ми можемо додати просто jquery як сценарій. Але захоплюючі речі виникають, коли у вас є декілька залежностей модулів з операторами імпорту в JS. Тоді все, що потрібно system.js, це налаштувати пакети за допомогою config.js і згадати оператори імпорту в ланцюжку залежностей javascript.
Джой

1
Я просто хотів би додати, що var $ = require('jquery');це імпорт у стилі CommonJS, а не стиль AMD .
Andreas Wahlqvist
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.