SystemJS和Webpack之间有什么区别?

27 浏览
0 Comments

SystemJS和Webpack之间有什么区别?

我正在创建我的第一个Angular应用程序,我想弄清楚模块加载器的作用是什么。为什么我们需要它们?我尝试在谷歌上搜索了很多次,但我无法理解为什么我们需要安装其中一个来运行我们的应用程序。仅仅使用import从节点模块加载内容不就足够了吗?我遵循了这个教程(使用SystemJS),它让我使用systemjs.config.js文件。为什么我们需要这个配置文件?为什么我们需要SystemJS(或Webpack或其他)?最后,你认为哪个更好?

0
0 Comments

SystemJS和Webpack之间的区别有以下几个方面:

1. 加载性能:使用SystemJS时,文件会逐个加载,导致首次加载时间较长;而使用Webpack时,可以将多个文件打包成一个bundle文件,只需加载一次,大大提高了性能。

2. 文件数量:SystemJS加载文件的数量较多,而Webpack可以将多个文件打包成一个bundle文件,减少了文件的数量,进一步提高了性能。

3. 动态模块导入:使用SystemJS时,需要动态导入模块以提高性能;而使用Webpack时,更关注逻辑的编写,因为一旦bundle文件被压缩和缓存,性能仍然会很好。

根据上述内容,我们可以得出以下解决方法:

1. 当需要提高加载性能时,可以考虑使用Webpack替代SystemJS。

2. 在使用SystemJS时,可以尝试使用动态模块导入来优化性能。

这样,我们就得出了问题的出现原因和解决方法。

0
0 Comments

SystemJS和Webpack之间的区别是什么?

SystemJS是一个通用的动态模块加载器,它可以在浏览器和NodeJS中加载ES6模块、AMD、CommonJS和全局脚本。当使用TypeScript或ES6时,需要一个模块加载器。SystemJS的systemjs.config.js文件可以配置模块名称与对应文件的匹配方式。在TypeScript中,将编译器配置为commonjs模块时,编译器生成的代码不再基于SystemJS。

Webpack是一个灵活的模块打包工具,不仅处理模块,还提供了打包应用程序的方式(合并文件、压缩文件等)。它还提供了一个带有热重载功能的开发服务器。

SystemJS和Webpack有所不同,使用SystemJS时,仍然需要进行一些工作(例如使用Gulp或SystemJS构建工具)来打包Angular2应用程序。对于生产环境来说,加载大量模块的文件并不高效。需要将所有内容整合到一个或两个文件中(您的代码和第三方库的代码),离线编译模板并利用tree shaking来减小打包的体积。同时还需要压缩CSS文件。

谷歌已正式转向使用Webpack,所以最好与社区中的大多数人保持一致。我即将将我的SystemJS项目迁移到Webpack,虽然不太确定如何操作。

在使用TypeScript时,将编译器配置为commonjs模块时,编译器生成的代码不再基于SystemJS。可能有点晚了,但我认为Webpack更加完善,虽然需要进行更多的配置,但它似乎更灵活。

我写了一篇关于如何从SystemJS/JSPM迁移到Webpack的文章,并解释了为什么JSPM + SystemJS与Webpack相比如此缓慢。

SystemJS和Webpack有一些区别,Webpack在打包应用程序方面更为强大和灵活,而SystemJS则更适用于通用的动态模块加载。选择使用哪个工具取决于具体的项目需求和个人偏好。

0
0 Comments

SystemJS和Webpack之间的区别是什么?

SystemJS是一个在客户端运行的工具。它在需要时动态地按需加载模块(文件)。你不需要一开始就加载整个应用程序。例如,你可以在按钮点击处理程序中加载一个文件。

SystemJS的代码示例:

// 顶部的导入示例
import myModule from 'my-module'
myModule.doSomething()
// 动态导入示例(可以放在代码的任何位置)
// 直到代码执行到这里时,模块才会被加载
System.import('my-module').then((myModule) {
  // myModule在这里可用
  myModule.doSomething()
});

除了配置工作外,就是这样了!现在你是一个SystemJS专家了!

Webpack则完全不同,并且需要花费很长时间去掌握。它与SystemJS的功能不同,但是当使用Webpack时,SystemJS就变得多余了。

Webpack会准备一个名为bundle.js的单个文件——该文件包含所有的HTML、CSS、JS等。由于所有文件都打包在一个文件中,因此就不再需要像SystemJS那样的懒加载(按需加载单个文件)了。

SystemJS的优点在于懒加载。应用程序应该加载得更快,因为你不需要一次性加载所有内容。

Webpack的优点在于,尽管应用程序在初始加载时可能需要几秒钟的时间,但一旦加载并缓存,它将变得非常快。

我更喜欢SystemJS,但Webpack似乎更流行。

Angular2的快速入门示例使用SystemJS。

Angular CLI使用Webpack。

Webpack 2(将提供树摇)目前处于beta版本,所以现在可能不是迁移到Webpack的好时机。

需要注意的是,SystemJS正在实现ES6模块加载标准,而Webpack只是另一个npm模块。

任务运行器(可选阅读,用于了解SystemJS可能存在的生态系统)

SystemJS的唯一责任是延迟加载文件,因此仍然需要完成其他任务,如文件的压缩、转译(例如,从SASS到CSS等)。这些需要完成的工作被称为任务

正确配置后,Webpack可以为您完成这些工作(并将输出一起打包)。如果想要在SystemJS中做类似的事情,通常会使用JavaScript任务运行器。最流行的任务运行器是另一个npm模块,叫做gulp

因此,例如,SystemJS可以懒加载由gulp压缩的JavaScript文件。正确设置后,gulp可以实时压缩文件并进行实时重新加载。实时重新加载是自动检测代码更改并自动刷新浏览器以进行更新的功能。在开发过程中非常方便。对于CSS,可以进行实时流式传输(即,您可以在页面重新加载之前看到页面更新的新样式)。

Webpack和gulp可以执行许多其他任务,这里不一一列举。我提供了一个示例 🙂

我也发现SystemJS和JSPM比Webpack更易于使用。此外,我发现生成的包要比另一个Webpack示例项目小。这是关于这个话题的我的帖子:stackoverflow.com/questions/40256204/...

您可以使用Webpack和懒加载,使用angular2-router-loader。了解更多:medium.com//...

关于Webpack和懒加载的最新消息。该工具的最新版本是ng-router-loader。它包含在AngularClass/angular-starter(Angular4 Webpack Starter)中。

我是Angular的新手,首先尝试了快速入门项目,在其中添加了一些功能,一切都很顺利,直到需要使用一些其他的API(例如three.js)。你将会发现很多人因为找不到项目为什么无法加载所需的API而感到困惑。控制台中的错误信息非常不明确:Error: (SystemJS) XHR error (404 Not Found) loading localhost:3000/three。在我看来,这一点都不专业,你可能要花费几个小时、几天的时间去找到解决方法。我肯定会切换到Webpack。

“Webpack则完全不同,并且需要花费很长时间去掌握。它与SystemJS的功能不同,但是当使用Webpack时,SystemJS变得多余了。”这一点我不同意。SystemJS仍然可以在不需要频繁构建的情况下进行开发。我可以对TS文件进行更改,保存(这将自动调用tsc.exe进行构建),然后重新加载页面,而没有任何问题。而使用Webpack时,我必须重新构建,这可能需要更长的时间,因为它将重新编译和构建所有内容。我还没有找到任何避免这个问题的方法。

0