来自 jquery 的 sourceMappingURL 在 apache 中生成 404 错误

Posted

技术标签:

【中文标题】来自 jquery 的 sourceMappingURL 在 apache 中生成 404 错误【英文标题】:sourceMappingURL from jquery generates 404 error in apache 【发布时间】:2013-08-12 00:37:16 【问题描述】:

正在浏览 apache 日志,发现有趣的事情:

当用户访问我包含 jquery 的任何页面时,apache 尝试获取 jquery-xxx.min.map 文件并失败并出现 404 错误。这是一个例子:

xxx.xxx.xxx - - [Date:TIME +0000] "GET /js/lib/jquery-1.10.2.min.map HTTP/1.1" 404 3134 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/28.0.1500.95 Safari/537.36"

这并不奇怪,因为我显然没有这个 min.map 文件。 我不喜欢这种行为。

查看jquery源码,找到了

/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
//@ sourceMappingURL=jquery-1.10.2.min.map

第一件事就是这个sourceMappingURL在评论里,没有其他命中。当我刚刚删除它时,404错误消失了。

我不知道 jquery 的人知道他们在做什么,但是谁能解释一下:

这个 sourceMappingURL 的意义是什么,它创建了一些以 404 结尾的连接?

删除这条线后我会失去什么?

我能找到的唯一相关的东西是this link,据我所知(如果我错了,请纠正我):

它在 IE 中产生一些错误(我正在通过 Chrome 查看) 已弃用(我正在使用最新版本的 jQuery) 它是用于调试目的(不了解用于什么调试目的)

【问题讨论】:

【参考方案1】:

有几种方法可以消除错误。

    默认情况下,Chrome 将启用源映射。您可以通过打开开发人员工具并更改常规设置来禁用此功能。取消选中启用源映射选项。这当然不会修复 Apache 上的错误。

    将您的页面更改为使用由 jQuery 或 Google 提供的 CDN,而不是使用本地版本。这将阻止您的本地 Apache 在您的日志中显示该问题。

    或者,您必须重写本地版本 jquery-1.10-2.min.js 顶部的注释以停止此错误。否则你需要等待 jQuery 的补丁。

发件人:

/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
//@ sourceMappingURL=jquery-1.10.2.min.map
*/

收件人:

/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license */

sourceMappingURL 是一项 HTML5 功能,在过去几个月中发生了一些变化。

有关 sourceMappingURL 的更多信息:Introduction to javascript Source Maps,2012 年 3 月

请参阅以下与 sourceMappingURL 最近更改相关的链接: sourceMappingURL and sourceURL syntax changed,2013 年 6 月

【讨论】:

作为后续,jQuery 的下载页面上有一个下载地图文件的链接(我昨晚没有注意到)。您还可以将此地图文件放在与 Web 服务器上的 jQuery 相同的文件夹中以停止 404。 Download the map file for jQuery 1.10.2【参考方案2】:

JQuery 2.1.4 min 文件在尝试下载地图文件时导致 404 IE > 8。 jquery-2.1.4.min.js 最后一行如下:

//# sourceMappingURL=jquery.min.map

有两个(好的)选项可以解决这个问题。

选项一(首选,保留用于生产的地图文件请求) 步骤 1. 将 min 文件中的最后一行移至第二行,如下所示

/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
//# sourceMappingURL=jqueryminmap

请注意,jquery.min.map 中的点已被删除。 第 2 步。为地图文件添加一个不带转换的包。

        var jquerymap = new ScriptBundle("~/bundles/jqueryminmap").Include(
                    "~/Scripts/jquery-2.1.4.min.map");
        jquerymap.Transforms.Clear();
        bundles.Add(jquerymap);

尽管这是首选方法,但它需要您更改源文件 (jquery-2.1.4.min.js)。希望 JQuery 开发人员或 IE 将在下一个版本中解决此问题。

选项二 添加 jquery 包而不删除转换(这会导致 MVC 引擎删除 2.1.4 分钟文件中的最后一行,这反过来会告诉浏览器不要请求地图文件)。

        var jquery = new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-version.js");
        bundles.Add(jquery);

这两个选项都将修复 IE > 8 和 JQuery 2.1.4 的地图文件上的 404,但我更喜欢选项 ONE。

【讨论】:

以上是关于来自 jquery 的 sourceMappingURL 在 apache 中生成 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript Source Map 详解

将供应商 CSS 与 LESS 结合后以及 gulp-minify 后 Sourcemap 错误

react打包中不想要sourceMap,但是在命令里加'GENERATE_SOURCEMAP=false'后windows下报错'GENERATE_SOURCEMAP'

react打包中不想要sourceMap,但是在命令里加'GENERATE_SOURCEMAP=false'后windows下报错'GENERATE_SOURCEMAP'

sourcemap详解

Webpack中的sourcemap