2

来自大多数IDE支持复杂重构的Java,可以跨越更多源代码文件和项目,我想知道是否有任何支持相同的Javascript编辑器?

我刚刚看完了一些关于 Cloud9 的 AST 工具支持的演示。该演示文稿已有一年多的历史了。我想知道从那时起 Cloud9 是否获得了复杂的重构功能,例如可以理解。NodeJs require() 语句?当然,这个问题不想局限于 Cloud9,我们有括号.io、Orion 等。这只是我遇到的演示文稿,所以这就是我给出基于 Cloud9 的示例的原因。

假设我有一个导出对象原型的 Node 模块,而我有另一个使用它的模块。假设我喜欢在导出的原型中重命名一个函数,而我正在寻找的是 IDE 将根据更改重构其他模块中的调用。是否有任何工具支持跨模块依赖项重构重命名?

4

2 回答 2

2

我浪费了很多时间来寻找解决方案,但是......

我认为没有你想要的现有应用程序。JavaScript 是一种有点奇怪的语言。例如范围界定。很难检测到函数调用,因为很难检测到您当前的变量是否是其他变量的实例/克隆,也很难检测到原型中的更改。您有一个“类”,创建一个新实例,您只能更改这个新实例的属性。当然,“this”关键字可能是作用域的一个新问题。

一个例子。如果我重命名addNew函数,也会重命名什么?

var Sample = function() {
    this.values = [];
};
Sample.prototype.addNew = function(value) {
    this.values.push(value);
};

var s = new Sample();
s.addNew("1");

var s2 = new Sample();
s2.addNew = function(value) {
    this.values.push(parseInt(value, 10));
};
s2.addNew("12x");

Sample.prototype.addNewRaw = Sample.prototype.addNew;
Sample.prototype.addNew = function(value) {
    this.values.push("x" + value);
};

var s3 = new Sample();
s3.addNew(12);
s3.addNewRaw(12);

console.log(s);
console.log(s2);
console.log(s3);

好的,这是一个糟糕的代码 :) 如果我的同事遇到了这个代码,我想,我会一直打到他们,直到他看起来像这个。是的,这是一个有趣的话题/问题,我认为“有可能并且可以使用吗?” 问题是我们需要问的第一个问题。当然可能,并且可以使用。

顺便说一句,我通常使用括号、sed、grep 和 jshint 并且也进行重构。

于 2014-01-04T20:40:06.697 回答
1

在我们公司,我们使用 Webstorm 对我们的 nodejs 项目进行重构。Webstorm 是 nodejs 恕我直言的最佳 IDE。

原因是它可以使用 Lint 和许多其他模块完成代码分析。经过代码分析,我们解决了很多编码错误,减少了很多弊端。

对文件名或方法名所做的更改将调用整个项目扫描并提示您自动更正了多少引用。

Webstorm 还支持许多 Vim 功能,例如代码之间的快速跳转和许多漂亮的键盘快捷键。事实上,我在墙上钉了一个 webstorm 的快捷备忘单。

这是Webstorm的链接

于 2014-01-04T20:41:15.590 回答