【问题标题】:JavaScript string concatenation breaks when compressedJavaScript 字符串连接在压缩时中断
【发布时间】:2012-11-09 17:13:27
【问题描述】:

我最近决定开始在一个项目中使用 Django Compressor 来自动连接和缩小 js 和 css,并在它们更改时刷新缓存。

我遇到的问题是,有些脚本在未压缩时可以工作,但在通过压缩器运行后它们会中断。我已经能够将可能性缩小到字符串连接。特别是 HTML 字符串连接。

例如:

boldTerm = '<b>' + terms[i] + '</b>';
term = new RegExp(term, 'g');
data = data.replace(term, boldTerm);

压缩时中断。我收到语法错误:

语法错误:缺失;声明之前

但这有效:

boldTerm = 'TEST';
term = new RegExp(term, 'g');
data = data.replace(term, boldTerm);

谁能解释一下:

  1. 为什么会坏?
  2. 我应该如何编写它以便在压缩时工作?

谢谢

编辑: 以下是引发错误的压缩代码部分:

(jQuery);';term=new RegExp(term,'g');data=data.replace(term,boldTerm);}}

它被扔在 RegExp(term, g) 中的“g”上

我发现这是可行的:

boldTerm = '<' + 'b' + '>' + terms[i] + '<' + '/b' + '>';
term = new RegExp(term, 'g');
data = data.replace(term, boldTerm);

这样就解决了我让它工作的部分问题。但“为什么”的问题仍然存在。

正在发生的事情:

  • jQuery
  • 小胡子
  • Django 压缩器 (JSmin)

【问题讨论】:

  • 1.为什么要覆盖“术语”变量? 2.这部分代码压缩后是什么样子的?
  • 在什么位置抛出错误?
  • 1.我没有特别的理由这样做。既然你问了,我想我不应该那样做。 2. 压缩代码生成错误的sn-p见上面的编辑。
  • 如果您不需要原始字符串类型的术语,您可以覆盖术语。为什么在(jQuery)之后有一个';?这可能是你的问题。 so 的语法高亮显示为红色,javaScript 真正看到的代码(字符串为红色)...
  • @NickHagianis 从上面最小化代码中突出显示的语法可以看出,(jQuery);'; 部分导致了问题。另外,最小化代码中的第一条语句在哪里?

标签: javascript compression minify string-concatenation django-compressor


【解决方案1】:

也许您没有导出 RegExp 并且压缩器正在重命名它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多