上下文:对于
JavaScript项目的开发版本,我编写了一个小实用程序来跟踪脚本文件依赖性(因为我不喜欢任何现有库的欢闹语法要求).我希望它以类似于其他语言的方式工作,所以我决定解析导入的文件以获得如下评论:
// DEPENDS: myurl.js //
使用jQuery的$.ajax()构建和评估依赖关系图并获取依赖关系.这适用于顶级文件.但是,使用ajax调用删除的文件会被删除注释,因此我无法进一步解析依赖项.
为了您的兴趣:周期是
>获取文件
>使用正则表达式解析依赖项的内容
>如果需要,扩展依赖图
>从(1)开始,如果(3)发生(当然有所需文件)
>按顺序评估文件的脚本内容
问题:有没有办法阻止jQuery从$.ajax()加载的文件中删除JavaScript注释标记?
$.ajax({ url: fileName,dataType: 'text',context: this,success: function(jqXHR) { this.parseImport(fileName,jqXHR); } });
(从一个提供fileName的方法内部,这个正确).我希望dataType:’text’会强制jQuery从字面上导入文本,但是,它没有:-D
$.ajax()的API文档告诉我,dataType:text元素的内容是用window.String解析的,但我不确定,window.String对它的输入做了什么.也许解决方案在这部分的某个地方?
如果有人能指出我正确的方向,我会很高兴的.
解决方法
您使用ajax的方式不会从文件中删除注释.你要求jQuery从服务器加载文本.它将忠实地加载该文本,而无需以任何方式修改它.我怀疑你在服务器端有一些删除注释的缩小/压缩过程.那个jQuery代码不会.
但你仍然可以解决任何删除评论的问题 – 不使用评论.您可以改用字符串:
"DEPENDS: myurl.js";
由于这不是评论,因此不应该被剥夺.起初看起来有点奇怪,但JavaScript的语法有ExpressionStatement,它是一个完全由表达式组成的语句.当然,字符串文字本身就是一个有效的表达式. (这就是他们如何“使用严格”;在ES5中没有它导致ES5之前的JavaScript引擎出现问题.)