javascript - 指导手动简化变量和函数的工具?

标签 javascript scope ide minify unminify

我有一个缩小的 JavaScript 文件。我可以通过各种工具发送它来插入换行符和缩进。然后我想要的是修复变量名称。我知道没有任何工具可以自动完成此操作。我需要的是一个工具来增强我手动执行此操作的尝试。它需要了解范围规则,以便当我将 c 重命名为 length 并将 d 重命名为 heightj()move(),这些更改将在 相同 cd 的所有地方进行使用 j,但不在存在具有相同名称的不同变量和函数的其他作用域中。

有没有这样的工具,专门为反转缩小而设计?如果没有适合此特定工作的工具,是否有一个智能 IDE 至少可以处理遵循作用域规则重命名变量或方法?

最佳答案

我发现了一个浏览器内/可下载的node.js 库工具,它可以很好地进行重命名重构。 Esprima处理以下 ES6 代码(对示例稍加修改),这样当我更改任何全局范围 hi 的名称时,只有注释 block 包围的 hi 名称已更改(抱歉,我想不出更好的方法来调出代码,因为 Markdown 没有显示在代码块中)。

// Array shuffling code from Underscore.js, code modified from base example on http://esprima.org/demo/rename.html
var shuffled;

var /*hi*/ = 'hi'; // initial declaration

function /*hi*/() { // modifies var above
    this.shuffle = 'x';
}

_.shuffle = function(obj) {
    function hi() {
        return 'hello';
    }
    var shuffled = [], rand;
    each(obj, function(value, index, list) {
        rand = Math.floor(Math.random() * (index + 1));
        shuffled[index] = shuffled[rand];
        shuffled[rand] = value;
    });
    hi(); // calls function defined above, name not changed by change to global scope 'hi'
    console.log(hello); // considered to be the same as the let statement below even though this is a syntax error since let doesn't get hoisted like var
    return shuffled;
};

let hello = 'hello';

function hiNotInScope() {
    var hi = 'something else'; // not in global scope, so change to global hi doesn't change this
    console.log(hi); // changed if the hi in this scope is changed
}

// hi (not changed since it's in a comment)

/*hi*/(); // calls global hi function.

只要不存在代码错误,它似乎就会遵守作用域规则(例如,在上面提升的同名 var 声明之上的 let 声明let 将被视为在范围内,但这不是问题,因为它是语法错误)。

关于javascript - 指导手动简化变量和函数的工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42660523/

相关文章:

javascript - 我无法将元素垂直对齐到底部

javascript - 将功能放在另一个范围内?

c++ - 使用 Stellarium API

python - PyQt5 中未处理的异常

java - Weblogic 没有他们的 IDE?

javascript - 为什么 textarea.selectionStart 在 IE 上不起作用?

javascript - 随机清空 Javascript 数组

javascript - 单击按钮重置所有表单数据

python范围问题

python - 可以从嵌套类定义实现继承吗?