组织和记录多文件JavaScript项目

时间:2013-06-13 05:50:38

标签: javascript documentation organization jsdoc

我正在开始一个相当大的JavaScript项目。该项目将在一个或多个名称空间中存在所有内容,因此在全局范围内只存在少量事物(目前只有一件事)。

为了保持组织有序,我希望将每个班级保存在自己的文件中(很像其他许多语言),而不是“模块”。

我构建了一个小编译脚本(使用NodeJS),它将在一天结束时将所有文件编译成一个JavaScript文件。

我认为我有一个很好的方法,但是我想让JSDoc(3)与我合作而没有太多运气,所以我想知道我是否可能以错误的方式解决这个问题,或者如果JSDoc有一些技巧我就错过了。

在源代码中,每个命名空间都是一个文件夹,每个类都是一个同名的文件。

每个类文件看起来都像这样:

var BaseNS = BaseNS || {};
BaseNS.SubNS = BaseNS.SubNS || {};

BaseNS.SubNS.MyClass = (function() {
    function MyClass() {
    }

    Object.defineProperties(MyClass.prototype, {
       'someProp', { 
            getter: function() { return this._someProp = this._someProp || 0; },
            setter: function(val) { this._someProp = val; }
       }
       // ... more
    });

    MyClass.prototype.someMethod = function() {};
    // ... more

    return MyClass;
}}());

编译在一起时,我的编译脚本处理依赖关系,以正确的顺序获取类,并删除重复的命名空间声明行。

我认为这种方法相对简洁明了。问题是,我无法弄清楚如何编写JSDoc文档的方式给我提供了我认为应该的东西。

我想采用类似“类”的方法。这实际上是针对一个很大程度上从DOM中删除的应用程序。另外,我希望整个项目都是vanilla,现代JavaScript(即没有RequireJS等)

任何想法如何记录,或更好的安排方式?

感谢。

1 个答案:

答案 0 :(得分:1)

在昨天玩了大约四个小时的各种事情之后,我想我已经找到了最佳格式,它结合了很好的效率形式,同时允许最少的评论以便正确解析事物。

"use strict";

/** @namespace */
var NS = NS || {};

/** @namespace */
NS.Sub = NS.Sub || {};

/**
 * @class
 */
NS.Sub.SomeClass = (function(NS) {
    /**
     * @constructor
     * @lends NS.Sub.SomeClass
     */
    var SomeClass = function() {
        /** @method */
        this.someFunc = function(cookie) {

        };

        Object.defineProperties(this, /** @lends NS.Sub.SomeClass */ {
            /**
             * @type {number}
             * @instance
             */
            somePublicProp: {
                getter: function() { return this._somePublicProp || 24; },
                setter: function(val) { this._somePublicProp = val; }
            }
        });
    };

    return SomeClass;
})(NS);

如果有人对如何做到这一点有任何建议,我很乐意听到。特别是,我无法找到摆脱var SomeClass; ... return SomeClass需求的方法。我想直接返回它(最好没有任何名字),但是JSDoc失去了对我的方法的跟踪,这意味着更多的评论,这并不酷。