【问题标题】:Load JS files from CDN using Webpack in Angular 5在 Angular 5 中使用 Webpack 从 CDN 加载 JS 文件
【发布时间】:2018-08-28 00:51:43
【问题描述】:

我正在为我的一个项目使用 Angular 5 + Webpack。现在我想从 CDN 加载所有带有 JS 文件的资产(包括延迟加载的 .chunks.js 文件)。

对于 CSS 和图像,我更改了 webpackpublicPath 选项,因此我能够从 CDN 加载 CSS 和图像,但问题在于 JS 文件。

对于 JS 文件,我更改了 <base href="{{CDN-PATH-HARE}}">,但它给了我这个错误

我也尝试使用 webpack 重命名 JS 文件,但这个技巧也没有奏效。

我只是想知道我是否朝着正确的方向前进,或者我应该以不同的方式思考。

谢谢。

【问题讨论】:

    标签: javascript angular webpack build cdn


    【解决方案1】:

    我想“在执行 tree-shaking 时使用 CDN”的讨论可能是一个相当复杂的讨论......

    此答案假定中断仅在切换到 CDN 时发生,并且您的应用程序在其他情况下得到正确服务。您确定正在为您的应用提供服务吗?

    history API 被 angular 使用,但由于来源不同,被视为安全问题。

    假设 CDN 中的外部可缓存库应该包含在您的捆绑中,您可以尝试下面列出的几个选项。我会先重新审视这个假设。 webpack 的重点是 treeshake 然后打包,所以我会确保你相信打包已经缓存和打包在 CDN 上的文件的好处。

    如果您确定要采用这种方法,您可以做几件事。您可以在 Angular 路由器上使用 hashlocationstrategy:

    imports [
    RouterModule.forRoot(routes, {useHash: true})
    ]
    

    或者,您可以在构建应用时完全托管您的应用,使用节点的 http-server,并在应用的 index.html 中使用主机 baseUrl。

    最后,如果这些都不适合你,你可以尝试使用 htaccess 文件,或者做一些手动路由,但我发现这些方法有点脆弱。

    有几个关于 SO 的预先存在的问题可以在一定程度上解决这个问题,但我认为 CDN 的问题需要一个新的回应。

    Angular 5 : Failed to execute 'replaceState' on 'History': A history state object with URL cannot be created in a document with origin 'null'

    ng build failed to execute 'replaceState' on 'History': A history state object with URL cannot be created in a document with origin 'null' and URL

    How to perform redirects in NodeJS like a .htaccess file?

    也许更好的答案是问这个问题:如果您的库从未更改,并且您的应用有版本更新,为什么要强迫您的用户重新下载您的库?

    【讨论】:

      猜你喜欢
      • 2018-01-05
      • 2022-07-24
      • 2017-02-17
      • 2022-11-04
      • 2021-11-22
      • 2016-04-25
      • 1970-01-01
      • 2016-01-19
      • 2019-10-31
      相关资源
      最近更新 更多