Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
2年前关闭。
Improve this question
我正在重构JavaScript库以利用单个 namespace 。我们有约200个模块,这些模块先前已将自己注册为jQuery插件或在全局对象上(错误)。在过去的版本中,为了使Intellisense正常工作,我为每个模块(我想要Intellisense)添加了模块引用,作为
到每个模块文件的顶部。
关于先前分配的所有内容都是有缺陷,脆弱和不雅观的。
我希望在新的版本中解决该问题。重构的主要目标之一是使新开发人员可以轻松地开始在库中工作,而Intellisense则具有极大的优势。
当前,我正在将所有* .js文件串联到单个nameSpace-vsdoc.js文件中。每个类的每个方法都使用vsdoc语法记录。每个模块都使用单个vsdoc引用。可以,但是很笨拙。 Intellisense的效果比以前提高了300%,但仍然不够准确。它错过了很多我的xml文档,并且无法很好地递归到返回稍微复杂的对象的方法/类中。
YUI Doc提供了一种从JsDoc语法构建文档的方法,但这对Intellisense没有帮助。深入的灵魂搜索未能揭示任何第三方解决方案。
是否有任何工具可以以更智能的方式生成VsDocs?
更新:
经过一番思考,测试和增量重构,我有了一个基本的命名空间looks like this jsFiddle。
这使我能够在自执行函数中编写松散耦合的模块,这些函数在 namespace 中注册所需的方法。所有模块均以:
我使用一个简单的Perl脚本生成了这个vsdoc,该脚本已附加到VS 2010构建事件中:
_first-vsdoc.js和_last-vsdoc.js文件将全部内容包装在一个自执行函数中。然后,根据需要/适当,将生成的vsdoc传递给Closure Compiler,YUI Compressor和Uglify。
这个过程比以前更好,但是仍然存在缺陷。
从头开始,在引用NameSpace-vsdoc.js的NewModule.js中,我得到了适当的Intellisense:
但是,当我将NewModule.js定义为(并编译)时:
我没有获得以下方面的适当Intellisense:
这很令人困惑,因为它在子命名空间上效果很好。我被迫这样做:
进行编译,并且Intellisense突然(显然)可以正常工作。
Intellisense使用jQuery的vsdoc(我在构造此过程时已经进行了深入研究)与链式方法一起工作,而jQuery并没有采取
这是经过修订的问题:从结构的 Angular 来看,我可以理解的jQuery的vsdoc与我自己的之间唯一可识别的区别是jQuery在同一闭包内组装了整个命名空间。我的命名空间和每个模块都包装在单独的闭包中。相比之下,我的vsdoc看起来像一长串的自执行函数。
放弃闭包/模块模式会带来太多风险;而且很难单独检验该假设。当库较小时,Intellisense可以很好地工作,因此无法生成数千个“JavaScript Intellisense消息:C:\\ js \ NameSpace-vsdoc.js(40:16):需要对象”错误。
有想法吗?
想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
2年前关闭。
Improve this question
我正在重构JavaScript库以利用单个 namespace 。我们有约200个模块,这些模块先前已将自己注册为jQuery插件或在全局对象上(错误)。在过去的版本中,为了使Intellisense正常工作,我为每个模块(我想要Intellisense)添加了模块引用,作为
/// <reference path="" />
到每个模块文件的顶部。
关于先前分配的所有内容都是有缺陷,脆弱和不雅观的。
我希望在新的版本中解决该问题。重构的主要目标之一是使新开发人员可以轻松地开始在库中工作,而Intellisense则具有极大的优势。
当前,我正在将所有* .js文件串联到单个nameSpace-vsdoc.js文件中。每个类的每个方法都使用vsdoc语法记录。每个模块都使用单个vsdoc引用。可以,但是很笨拙。 Intellisense的效果比以前提高了300%,但仍然不够准确。它错过了很多我的xml文档,并且无法很好地递归到返回稍微复杂的对象的方法/类中。
YUI Doc提供了一种从JsDoc语法构建文档的方法,但这对Intellisense没有帮助。深入的灵魂搜索未能揭示任何第三方解决方案。
是否有任何工具可以以更智能的方式生成VsDocs?
更新:
经过一番思考,测试和增量重构,我有了一个基本的命名空间looks like this jsFiddle。
这使我能够在自执行函数中编写松散耦合的模块,这些函数在 namespace 中注册所需的方法。所有模块均以:
/// <reference path="~/js/NameSpace-vsdoc.js" />
我使用一个简单的Perl脚本生成了这个vsdoc,该脚本已附加到VS 2010构建事件中:
use strict;
my $dir = $ARGV[0];
my $destfile = "$dir\\js\\NameSpace-vsdoc.js";
unlink($destfile);
my $js = "";
$js .= extractFile("$dir\\js\\_first-vsdoc.js");
$js .= extractFile("$dir\\js\\NameSpace.js");
$js .= extract("$dir\\js\\modules");
#Add additional directories as needed
$js .= extractFile("$dir\\js\\_last-vsdoc.js");
open(VSDOC, "> $destfile") or die("Cannot open vsdoc file: $destfile ; $!");
print VSDOC $js;
close(VSDOC);
sub extract
{
my $ret = "";
my $path = $_[0];
opendir(JSDIR, $path) or die("Cannot open js directory: $path ; $!");
while((my $filename = readdir(JSDIR)))
{
if($filename =~ /.*\.js$/ &&
$filename !~ /-vsdoc/ &&
$filename !~ /_first/ &&
$filename !~ /_last/ &&
$filename !~ /.min\.js/)
{
$ret .= extractFile("$path\\$filename");
}
}
closedir(JSDIR);
return $ret;
}
sub extractFile
{
my $ret = "";
my $filename = $_[0];
open(JSFILE, "$filename") or die("Cannot open js file: $filename ; $!");
while((my $line = <JSFILE>))
{
if($line !~ m/-vsdoc\.js/ )
{
$ret .= $line;
}
}
close(JSFILE);
return $ret;
}
printf("Finished generating NameSpace vsdoc.\n");
_first-vsdoc.js和_last-vsdoc.js文件将全部内容包装在一个自执行函数中。然后,根据需要/适当,将生成的vsdoc传递给Closure Compiler,YUI Compressor和Uglify。
这个过程比以前更好,但是仍然存在缺陷。
从头开始,在引用NameSpace-vsdoc.js的NewModule.js中,我得到了适当的Intellisense:
Ns.register() //visible
Ns.controls.register() //visible
Ns.actions.register() //visible
但是,当我将NewModule.js定义为(并编译)时:
(function _alertClosure() {
Ns.register('alert', function alert(someText) {
///insert proper vsdoc style comment
});
}());
我没有获得以下方面的适当Intellisense:
Ns.alert() //no Intellisense help
这很令人困惑,因为它在子命名空间上效果很好。我被迫这样做:
Ns.alert = Ns.alert || Ns.register('alert', function ....
进行编译,并且Intellisense突然(显然)可以正常工作。
Intellisense使用jQuery的vsdoc(我在构造此过程时已经进行了深入研究)与链式方法一起工作,而jQuery并没有采取
y.x = y.x || new x()
技巧来实现它。这是经过修订的问题:从结构的 Angular 来看,我可以理解的jQuery的vsdoc与我自己的之间唯一可识别的区别是jQuery在同一闭包内组装了整个命名空间。我的命名空间和每个模块都包装在单独的闭包中。相比之下,我的vsdoc看起来像一长串的自执行函数。
放弃闭包/模块模式会带来太多风险;而且很难单独检验该假设。当库较小时,Intellisense可以很好地工作,因此无法生成数千个“JavaScript Intellisense消息:C:\\ js \ NameSpace-vsdoc.js(40:16):需要对象”错误。
有想法吗?
最佳答案
我同意@Ilya Volodin。
ReSharper是Visual Studio的绝佳工具。
我只用了一个月,就离不开它。
这不能回答您的问题,但是对您很有用。
这是一个很好的摘要,可以在官方网站上找到:
“ReSharper是一个著名的产品工具,使Microsoft Visual Studio IDE变得更好。世界各地成千上万的.NET开发人员想知道他们如何过着没有ReSharper的代码检查,自动重构,快速交付和编码帮助的生活。”
10-06 07:16