软件包管理器:Bower vs jspm

77

你不需要使用Bower。 - Dan Dascalescu
2个回答

100

JSPM是一个比Bower更大且更有雄心壮志的项目。Bower只有一个目的——从网络上下载所需的源文件到硬盘中。对于您作为消费者来说,Bower没有其他功能。如果要执行Bower中的脚本文件,则需要为它们创建单独的脚本标记。

而JSPM不仅是一个模块下载器。它默认会下载前面提到的SystemJS。SystemJS尽可能地实现了与https://whatwg.github.io/loader/相似的规范。事实上,JSPM的作者非常积极参与规范过程。通过 SystemJS,今天您可以在浏览器中加载ES6模块(通过在浏览器中转译),CommonJS或AMD模块,而无需构建它们。除了ES6模块之外,traceur/babeljs/typescript支持的所有其他ES6特性也同样可用。这取决于在运行jspm init时选择哪个编译器。SystemJS在node.js和浏览器中的工作方式相同,因此轻松进行应用程序的单元测试。

此外,当您需要进入生产时,它还可以为您构建捆绑包(jspm build)。因此,显然jspm(+systemjs)是一种更强大的工具。

因此,可以遵循以下经验法则:

  • 需要快速获取jQuery并将其包含在您的服务器端模板HTML中?使用常规的脚本标记。Bower已过时。
  • 需要构建大型JS应用程序?选择Webpack。JSPM未能达到关键质量,现在每个人都在使用Webpack。

更加精确地说,SystemJS本身使用ES6模块shim,因此如果您只需要ES6模块支持,则可以跳过SJS(除非您需要它具有的其他功能)。 - ShawnFumo
@Capaj,我对SystemJS非常感兴趣,但它似乎没有应有的发展势头。其他一些工具(例如Webpack)是否也提供构建作为可选功能?我的主要目标是使用ES6模块语法并模拟节点和浏览器来处理它。次要目标:提供的构建功能是可选的。第三个目标:支持这种未来的神奇功能:http://www.2ality.com/2013/11/es6-modules-browsers.html - Jon Coombs
8
Bower只有一个目的-从网络下载所需的源文件到您的硬盘驱动器。这就是为什么它非常出色,因为它只做一件事。 - tugberk
2
@tugberk 是的,但是作为Web开发人员,我们的工作并不止于此,对吧?我们需要加载第三方库并使用它。这就是JSPM擅长的地方,它胜过所有其他替代方案。特别是最流行的webpack。 - Capaj

64

补充Capaj的回答:

如果您有一个小项目,无论如何都可以选择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如此热情,但我认为对于需要在html文档中添加jquery的人来说,使用普通的脚本标签会更好。 - Capaj
10
在这种情况下,JQuery只是一个例子,所以我认为你的评论不成立。我必须说我喜欢这个回答的精神 - 充满激情和快乐,让我想立即使用jspm。 :-) - Mladen Mihajlovic
2
重点不在于这个。是的,我们可以只添加jQuery作为脚本。但是当您有多个模块依赖项并使用import语句导入JS时,有趣的事情就发生了。然后,所有必需的system.js只需要使用config.js配置包,并在JavaScript依赖链中提及导入语句。 - Joy
1
我想补充一下,var $ = require('jquery'); 是一种 CommonJS 风格的导入方式,而不是 AMD 风格。 - Andreas Wahlqvist
我只是在尝试理解jspm,但我认为我可能错过了一些非常基本的东西。如果jspm.io无法访问,jspm是否仍然有效? - Kjell
@Kjell 我不这么认为,它必须与服务器通信以从服务器获取软件包。目前可以访问:https://status.jspm.io/ - trusktr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接