JavaScript AMD模块:如何跨模块获取Visual Studio智能感知功能

8
在研究javascript环境下的异步模块定义(AMD)后,我想知道如何在Visual Studio 2010中为依赖模块启用智能提示功能。例如给定模块A:
define(function() {
    return {
        square: function(value) {
            return value * value;
        }
    };
});

和相应的模块B:

define(["A"], function(a) {
    return {
        value: a.square(10)
    }
});

我希望在模块B中,对于模块A(作为参数a表示)能够拥有完整的智能提示功能。请注意,这两个模块将在不同的文件中定义(在本例中为A.js和B.js)。


我已经为类似的问题在Visual Studio上发布了一个错误报告:https://connect.microsoft.com/VisualStudio/feedback/details/2825862(但是当我发布时它没有理解我的登录信息)。如果类似的情况可以解决您的问题,请在评论中提出。 - beruic
2个回答

5
这条评论帮助我部分地解决了这个问题:GitHub仓库的评论 基本上,我必须确保这个:
/// <reference path="require.js" />

该代码位于_references.js文件的顶部。它可以在'require'和'define'块中工作,但似乎无法在'define'块内部的匿名函数中工作。


2
看起来RequireJS的作者正在这里开发Intellisense支持: https://github.com/jrburke/requirejs-intellisense 不幸的是,我还没有让“魔法”起作用。
更新:在某些情况下,我已经让它工作了。特别是当所有JS文件都在同一个文件夹中时,它的表现非常出色。

我将所有的JavaScript文件放在同一个文件夹中,并“引用”了require.js(将文件拖到编辑器中以获取引用注释)。我发现它通常需要几秒钟才能开始工作。我确实让它在一些其他文件夹结构中工作,但似乎相当有限。此外,我认为它仅适用于require调用(而不是定义)。 - dcstraw
我能够获取define和require函数(即'require'出现在默认模块定义的intellisense中)。然而,我无法为test或person获取intellisense,即'test.'不会列出numberProperty和childObject。这就是我所说的“完整”智能提示的含义。 - Charles
搞定了,这是我所做的:
  1. 克隆 https://github.com/jrburke/requirejs-intellisense
  2. 在 vs 11 中创建一个空的 Web 应用程序 sln(vs 10 对我来说不起作用)
  3. 将测试中的所有 js 文件复制到 sln 中
  4. 打开 default.js 并删除 'js/' 前缀(person 和 test 不在子路径中)
  5. 在 default.js 的顶部添加 "/// <reference path="require.intellisense.js" />"
  6. person 参数现在应该有智能感知
  7. 打开 test.js 并添加空依赖项数组,即 define 现在应该是 "define([], function () {"
  8. default.js 中的 test 参数现在具有智能感知,耶 :D
- Charles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接