【问题标题】:Angular 2: why to use NPM manager instead of CDN references? [closed]Angular 2:为什么使用 NPM 管理器而不是 CDN 引用? [关闭]
【发布时间】:2016-12-14 02:49:30
【问题描述】:

Angular 2 看起来比 Angular 更好更简单,但是,我在使用 NPM 时遇到了问题——我的工作中不允许这样做。但更大的问题是我们为什么需要 NPM? 我已经将 Angular 与 CDN 版本一起使用,它总是声称比本地版本更好(更好的缓存),那么,使用 NPM 管理器与 CDN 引用(如果有的话)有什么优势?为什么要扩大项目的本地规模?

今天我看到 WEB 开发到处都在使用 NPM。 我想了解为什么突然间 WEB 开发开始转向本地资源而不是普通的在线资源。 我正在寻找令人信服的解释,好的文章/博客指出为什么选择一个与另一个。

【问题讨论】:

  • 不允许使用 NPM 是荒谬的。并且有很多博客解释了为什么 js CDN 库并不总是像他们声称的那样有好处。
  • 不幸的是,我们公司有一些严格的隐私政策,到目前为止,由于他们的一些 EULA 条款,我们不能使用 NPM。

标签: javascript node.js angular


【解决方案1】:

Angular 的一个好处是框架的结构允许您根据特定的应用程序需求定制应用程序包。

从 CDN 下载一个适合所有 iife 的大小是不可能的

如果您查看 Angular npm 包,您会发现它们由许多构成框架的较小模块组成。

使用一种称为“摇树”的技术,您的捆绑器可以对您的代码依赖项运行静态分析,并创建一个仅包含引用模块的捆绑包。这可以大大减少包的大小。

以下是有关 Tree Shaking 的更多信息:

http://www.syntaxsuccess.com/viewarticle/tree-shaking-in-javascript

【讨论】:

  • 我得到了 TreeShaking 等,但为什么不与在线模块做同样的事情呢?为什么它们必须驻留在我的本地服务器上?如果我制作 5 个类似的项目,我将拥有它们模块的单独副本,乘以 5。如果我使用 CDN 或使用在线版本,所有 5 个项目将指向同一个在线源,并且有 0 个本地脚本。
  • 文件必须存储在本地,以便您能够在“构建”时创建优化的包。
【解决方案2】:

主要是因为现代 Web 应用程序将使用某种依赖项或模块加载器,例如 requireJS 或(在 Angular2 的情况下)SystemJS 或 commonJS,而 CDN 源使这变得更加复杂,因为它需要一个新的资源 http 连接到从不同的域获取您的源资产(跨服务器脚本问题)

【讨论】:

  • CDN(代表内容分发网络)不是可以提供相同的内容,但可以在线提供吗?我不明白为什么这些模块应该是本地的,而不是对在线资源的引用。
  • 是的,你可以在我使用的 requireJS 中。但是当与“shim”依赖项一起使用时,不允许使用 requireJS 优化器进行构建,因为它不能保证 CDN 资源会在构建之前加载。即使配置支持 CDN,如果您确实在 CDN 中拥有所有 3rd 方库,网络连接也会减慢您的应用加载速度。
猜你喜欢
  • 2014-09-02
  • 2022-01-22
  • 2017-07-10
  • 1970-01-01
  • 2022-01-12
  • 2013-01-09
  • 2015-06-03
  • 2015-04-26
  • 2011-07-08
相关资源
最近更新 更多