【问题标题】:An object disappears after packing a JavaScript library打包 JavaScript 库后对象消失
【发布时间】:2015-09-24 18:09:13
【问题描述】:

我创建了一个 JavaScript 库,并在此 URL 上选择了以下选项:Shrink VariablesBase62 Encodedhttp://dean.edwards.name/packer/。在这个库中,我声明了一个对象ax,但是当我在网页中使用打包版本时,我收到一个错误消息Uncaught ReferenceError: ax is not defined

这个库的原始代码如下所示。

var ax = {
     scaleUp:function(win) {
          //code omitted
       },
downGrade:function(win) {
        //code omitted
     }
}

在我使用这个库的网页中,我有如下代码。此代码有效,如果我不使用压缩,而是使用 Microsoft 的 Minifier 对其进行压缩,或者仅使用原始 JavaScript 库而不进行压缩或打包。

var result = ax.downGrade(w);

问题: 为什么压缩版本无法访问变量ax?使用打包版本时需要添加其他内容吗?

更新 1

我无法让打包文件工作,但在我的情况下,通过以下 url 的另一个压缩实用程序打包我的代码:http://jsutility.pjoneil.net/。它提供了同样出色的压缩效果。

我仍然不确定为什么原始 url 上的实用程序无法生成我的库的工作版本,即使我的原始代码在任何网页上都没有任何错误。

【问题讨论】:

  • 查看打包好的 JavaScript 并找出 ax 去了哪里。您没有提供任何重现该问题的代码,因此我们无法提供帮助。
  • 你是如何链接打包好的脚本的?
  • 我的库很大,原始状态下的大小约为 56 KB,打包状态下的大小约为 16 KB。这就是为什么我没有提供我的库,但它有我在这里发布的代码。
  • @Jasen,我刚刚在此链接 dean.edwards.name/packer 上使用了打包器,并选择了 base62 编码和收缩变量。我需要链接这个打包的脚本吗?可能这就是我所缺少的。
  • 您的库是否在单独的文件中?一个/一些文件是否依赖于ax?如果是这样,您需要重新打包它,以便首先打包ax

标签: javascript packing


【解决方案1】:

在尝试调用 ax 之前检查您的控制台是否有错误。在它们所属的地方显式放置分号。例如在ax 定义的末尾,您应该放置一个分号,即使在标准代码中它也很好。删除显式的 var 声明。当我做这些事情时:

ax = {
     scaleUp:function(win) {
          alert("up");
       },
downGrade:function(win) {
        alert("down");
     }
};
result = ax.downGrade();

在 jsFiddle 和控制台中运行没有问题:http://jsfiddle.net/7kdnw65n/。我怀疑这与算法如何“缩小”变量有关。结果包是:

eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('0={5:1(2){3("6")},4:1(2){3("7")}};8=0.4();',9,9,'ax|function|a|alert|downGrade|scaleUp|up|down|result'.split('|'),0,{}))

【讨论】:

  • 好的。我会尝试你的建议并告诉你。
  • 我尝试了你所有的建议,但仍然是同样的错误。我通过使用以下标签在 asp.net 中使用打包文件:
  • 尝试从尽可能短的版本开始,例如使用您提供的 snipit。不要调用 ax 直接把它带进来。看看有没有错误。然后添加对提醒某些内容的简短方法的调用。然后不断添加功能。这将花费大量时间,但您最终会找到问题所在,以便解决问题。
  • 我会试试的。感谢您的帮助。
  • 我无法让它工作,所以我在这个 url 上尝试了一个替代打包实用程序:jsutility.pjoneil.net,并且来自这个 url 的压缩文件运行良好。所以我怀疑,原始网址上的打包实用程序以某种方式弄乱了我的代码。
猜你喜欢
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 2015-04-08
  • 2014-02-17
  • 1970-01-01
相关资源
最近更新 更多