在使用r.js优化js文件时使用esprima解析文件错误

时间:2013-11-01 01:20:36

标签: javascript requirejs r.js

我正在使用r.js将多个js文件优化为一个。它之前工作正常。最近,我修改了一些js代码,将代码添加为:

var x = 08;

然后显示

  

错误:使用esprima解析文件D://webroot/js/a.js

     

错误:第45行:意外的令牌ILLEGAL。

第45行是我添加var x = 08的地方,09也会显示错误。似乎同时包含89的0开头的数字是非法的。也许他们被视为bese 8号..?

如何让r.js忽略这一点并仍然优化js文件?

4 个答案:

答案 0 :(得分:15)

我有同样的问题

当需要文件时,它只是一个双逗号。 前

define([
 'file1',
 'file2',
 'file3',,
 'file4'

希望这有帮助

答案 1 :(得分:5)

错误是由于r.js内部使用的Esprima引起的。要复制问题,您可以转到this page并输入var x = 08;

一般来说,似乎JavaScript解释器会处理一个带有前导零的数字,可以被解释为八进制数作为八进制数但是如果它不能被解释为八进制数(例如08),然后他们将其视为十进制。

我已经使用Node.js进行了测试并得到了这个:

$ node
> 07
7
> 08
8
> 09
9
> 010
8
> 

为了更有趣:

> (function () {'use strict'; var x = 08;})()
undefined
> (function () {'use strict'; var x = 012;})()
SyntaxError: Octal literals are not allowed in strict mode.
[ ... traceback deleted ...]

当打开严格模式时,octals是非法的。

我会避免使用octals,并且不会在JavaScript中用零填充任何数字。

答案 2 :(得分:0)

当我忘记了我的单行if语句中的问号时,我遇到了同样的错误,在一个require js模块中。

错误的行:

var check = self.currentScroll() > self.lastScroll() ? 1 : self.currentScroll() < self.lastScroll() -1 : 0

更正:

var check = self.currentScroll() > self.lastScroll() ? 1 : self.currentScroll() < self.lastScroll() ? -1 : 0

答案 3 :(得分:0)

我在解析一个很长的字符串时遇到了同样的问题:

var styleHTML = "<style>....</style>"

事实证明,在字符串中我还包括了一些这样的评论:

/* ... */

当我删除字符串中的所有 css评论时,它可以正常工作!

希望这有帮助。