正如在java项目中编写和存储mongoDB map/reduce函数的地方所指出的那样- Eclipse不喜欢JavaScript (.js
)文件只包含以下内容:
function(doc) {
if(doc.somekey) emit(doc._id, doc);
}
关键字function
被错误标记:
标记"function"语法错误,标识符应该在这个标记后面
这个表单在MapReduce中使用,但也许它不是完全有效的JavaScript(我不是律师)。有什么办法允许这张表格吗?
edit它看起来像一个函数表达式而不是函数语句。(MDN, ECMA-262)
非解决方案:"只需添加一个函数名"根据https://stackoverflow.com/a/11258388/185799看来,这是不重要的节省这些函数的大小。但是,添加函数名会导致:
{"error":"compilation_error","reason":"Compilation of the map function in the 'myView' view failed: Expression does not eval to a function."}
可能的解决方案?添加一个函数名或"模块"。在顶部的exports = ",然后在构建阶段删除它,使用grunt/gulp/yeoman或相关的东西。
现在,我实际做的是使用文字形式
function anonymous(...
,然后在调用synchronizeWithDb()
之前做一个字符串替换,用function(
替换function anonymous(
。这并没有回答我的问题,但可以解决它。
你有三个糟糕的选择:
- 你可以忽略这个错误,因为CouchDB可以处理这个文件(它稍后会包装它以使其有效)。
- 你可以改变文件扩展名,但你会失去语法高亮,代码完成和错误检查。
- 在错误视图中删除错误。它将一直被删除,直到您下次更改文件或进行完整构建。
- 您可以将Eclipse配置为停止验证文件。
- 可以忽略该资源。这使得该文件对Eclipse和所有插件不可见。这意味着您不能再在Eclipse中编辑它。使用资源过滤器
- 您可以检查JavaScript的验证规则的每个项目首选项。也许你可以排除这个文件。