0

我一直在使用以下模型来命名我最新的脚本。到目前为止,它有一些明显的优势,虽然我确信可以以其他方式复制,但确实有助于我的编码过程。不幸的是,我遇到了一个明显的缺点......当使用一些 JS 压缩实用程序时,它们严重破坏了代码,以至于我必须避免许多有利的选择。幸运的是,我使用此模型保存的代码有助于减轻“损害”。

我仍然很想知道是否有更可行的解决方案,因为 min.js 只会在 Chrome/IE 中始终失败。我知道下面的内容对某些人来说有点太抽象了。有没有专家可以指出我正确的方向。我用过 YUI、Packer 和 JSMin。JSMin 工作可靠,但效率不高……

/* Global Namspace */
(function (T) {"use strict";
    /* Top.Sub1 */
    (function(S1) {


        // ... Some methods (public/private)


        /* Top.Sub1.Mini */
        (function(M) {

            // ... Some methods (public/private)

        }(S1.Mini = S1.Mini || function(o){}));
    }
    (T.Sub1 = T.Sub1 || function(o){}));

    /* Top.Sub2 */
    (function(S2) { 

        // ... Some methods (public/private)

        /* Top.Sub2.Mini1 */
        (function(M1) {

            // ... Some methods (public/private)

        }(S2.Mini1 = S2.Mini1 || function(o) {}));

        /* Top.Sub2.Mini2 */
        (function(M2) {

            // ... Some methods (public/private)

        }(S2.Mini2 = S2.Mini2 || function(o) {}));
    } (T.Sub2 = T.Sub2 || function(o) {}));

} (window.Namespace = window.Namespace || function(o){}));

更新:我面临的最常见错误是各种“意外令牌”。有时是')',有时是'}'。每隔一段时间,它就是一个 '('。我还没有解决 gzip 问题,因为我想要这个。

更新 2:已使用 Tiidied-jsHint 传递文件检查/删除了 ns,但仍无法正确缩小。它肯定与这个模型有关......有人对为什么有明确的答案吗?如果没有,欢迎进一步的建议。PS Github 已使用 Tiidied-jsHint 传递代码进行了更新。

4

2 回答 2

0

我想说阅读这篇文章,了解需要做什么以及需要避免什么以实现良好的缩小 - <a href="http://alistapart.com/article/javascript-minification-part-II" rel="nofollow ">http://alistapart.com/article/javascript-minification-part-II

然后选择合适的模块框架,如AMDcommonjs

升级版。我的主要建议是在您的代码上使用 linter,例如http://jshint.com,并遵循类似http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml的编码风格。解释为什么某事会在某些情况下中断。它还将使您的代码更容易被开源贡献者所接受。

于 2013-03-20T11:37:39.787 回答
0

在我可以使用的每个缩小器上测试了几乎所有选项之后,代码缩小得非常好。(无论有没有整洁等......)当任何缩小器尝试替换或混淆符号时,问题就出现了。特别是,它不能很好地处理这个 for 循环:

for (i = 0; i < l; i++) { 
    _.points[i] = new S.Point(_, pts[i]);
}

去除循环允许优化正确发生。

于 2013-03-20T17:50:49.537 回答