如何在单个文件中加入两个以上分离的 JS 库

How to join two+ separated JS libraries in a single file

我有一些库(比如语义 ui、jquery...),我通常直接从 CDN 单独加载到我的 <HEAD> 标签中,每个库都有自己的<SCRIPT> 标签。

然后我尝试打开每个 JS 文件的内容,复制每个文件并将每个内容附加到本地单个空白 JS 文件。然后我将这个单个文件导入到我的项目中。好的,它工作正常并且在控制台上没有错误。但是有些东西不工作。

检查 Chrome Dev Tools 的 NETWORK 选项卡,我发现这些库还尝试动态下载许多 css/image 文件。浏览器尝试从我的本地域而不是 CDN 下载这些资源——当然。所以我也必须将所有这些文件移动到我的本地服务器。

但我的问题是:无论如何我可以使用类似于 BASE 标签但脚本的东西吗?

例如,我的 single.js 会是这样的:

base_download = 'cdnjs.cloudflare.com';
//HERE COMES THE CONTENT OF JQUERY LIBRARY
//...

base_download = 'cdn.jsdelivr.com';
//HERE COMES THE CONTENT OF SEMANTIC UI LIBRARY
//...

base_download = 'cdnjs.cloudflare.com';
//HERE COMES THE CONTENT OF THE ANIMATE JS LIBRARY
//...

这样浏览器就可以正确的知道去哪里下载每个js代码请求的内容

如果我不清楚,我很抱歉,我在这里澄清你需要的一切!

根据这个问题和您的 other question,我认为您可能误解了 CDN 的用途。

在这个问题中,您说您想要复制托管在 CDN 上的代码,将其统一到一个资源中,然后 您自己 托管。那不是问题。但是,这样做的方法不是使用 CDN 托管文件,而是使用实际的库源并通过 webpack、browserify 或 rollup 等捆绑器构建您自己的捆绑包。

这些打包器在构建时会考虑您现在遇到的问题。静态资源要么正确设置为相对资源,要么内联添加到包中。

此外,在您的一条评论中,您说:

downloading a single file is way faster than downloading 10 individual JS files for 10 different libraries. For each library the browser has to initiate a request, domain resolution and so on. Joining JS files make it load much faster and also PageSpeed Insights give you much better score when importing less JS files

如果您必须实际下载资源,则为真。正如我在您的其他问题中提到的那样,CDN 的重点是尝试制作它,这样您就不必在每次访问不同的网站时都下载库的副本。相反,如果 站点 A站点 B 都使用 somelib@2.0.0,并且都加载通过使用带有 src: <script src="http://some.cdn.com/somelib@2.0.0"></script> 的脚本来获取资源,无论您首先访问哪个站点都会让您的用户加载该脚本,并且每当您的用户访问第二个站点时,浏览器都会说 "I already have that resource cached, I'll just use that"。

这为您的用户节省了一次网络调用,这意味着没有请求开销,只有浏览器意识到它已经拥有资源所需的开销。