关于将web应用程序源代码从Coffeescript迁移到javascript的建议

Advice on migrating a web app source code from Coffeescript to javascript

本文关键字:迁移 javascript Coffeescript web 应用程序 源代码      更新时间:2023-09-26

我继承了一个中等复杂的Rails应用程序的责任,这意味着除了学习Ruby和Rails之外,还要努力理解很多我自己没有写的代码。该项目还包含一个用Coffeescrapt编写的非平凡的Backbone.js应用程序。由于我将在很长一段时间内成为这个项目的唯一开发人员,而且我不知道Coffeescript,所以我计划将整个源代码转移到纯Javascript。

我想知道最好的方法是什么。编译成javascript很容易,但要让代码看起来"正常",还需要进行大量重构。

通过更换之类的东西来清理cruft

var a;
a = 1;

带有

var a = 1;

很简单,或者甚至不值得麻烦。我更担心这个项目的整体结构。Coffeescapet生成的文件开头如下主干视图代码:

(function() {
  var extend = function(child, parent) {
    for (var key in parent)           {
        if (hasProp.call(parent, key)) child[key] = parent[key];
  } function ctor() {
        this.constructor = child;
      }
    ctor.prototype = parent.prototype;
    child.prototype = new ctor();
    child.__super__ = parent.prototype; return child;
  },
           hasProp = {}.hasOwnProperty;
App.Views.MyClass = (function(superClass) {
extend(MyClass, superClass);
function MyClass() {
  return MyClass.__super__.constructor.apply(this, arguments);
}
# rest of the code here...
    });
}).call(this);

我只想知道处理这件事的明智方法是什么,而且我还没有找到任何"最佳实践"来做我想做的事情。

最好的办法是:把所有东西都输入git,然后继续?使用extend的Backbone/Undercore版本,而不是在每个文件的顶部重新定义相同的函数?使用完全不同的方法将所有单独的文件串在一起?

只是在寻找一个大致的方向。我会弄清楚细节的。

如果你能使用ES6,你可以尝试使用像脱咖啡因这样的工具。

否则,如果您确定要移植到Javascript,那么您最好手动重写,而不是试图修复生成的代码。

从一次重新创建一个文件开始,边写单元测试。这不仅有助于你更好地理解这个项目,而且你还可以学习Coffeescapet(可能还有一些好的技巧)。

如果你在Coffeescapet网站上阅读了概述,它提供了一个在两种语言之间转换的翻译表。每当你遇到不懂的语法时,看看当你把它输入到js2.coffee中时会产生什么。这里还有另一个从Coffeescept迁移到ES6的好参考。

您最终将花费更多的时间和精力(更不用说最有可能在CoffeeScript中引入试图复制超级或子类之类的错误)。与其试图重写一个正在运行的CoffeeScript web应用程序,不如深入研究并在进行过程中吸收CoffeeSript,并发现需要更改内容。停止反抗!CoffeeScript有很好的文档记录,并且已经证明它是一种非常有用的语言。学会它,它之所以可怕,是因为它是新的!