为Node和浏览器构建AND代码

时间:2015-01-17 22:34:10

标签: javascript node.js requirejs js-amd

我一直在网上搜索各种存储库和博客,似乎无法找到我要找的东西。

问题

使用像RequireJS这样的东西通过AMD构建代码时,您可以设置模块,如下所示:

第一单元:

define(['a'], function () {
    return {
        methodOne: function () {
            return 'something';
        }
    }
});

第二单元:

define(['b'], function () {
    return {
        methodTwo: function () {
            return 'something';
        }
    }
});

这对构建项目有很大帮助。它有助于将问题分成多个文件而不是一个大文件。

但是如何将其优化为一个文件?我认为你会使用某种构建工具,并提出类似的东西:

define(function () {
    return {
        /* other dependency functions */

        methodOne: function () {
            return 'something';
        },

        methodTwo: function () {
            return 'something';
        }
    }
});

适用于AMD环境。这基本上只是将所有模块组合成一个文件。

所以我有几个问题:

  • 如何在像我这样的版本中正确优化我的AMD代码 上文提到的?这甚至是最好的方法吗?
  • 如何让我的代码可以移植到AMD,Node和浏览器?

我尝试/发现的内容

看起来RequireJS有自己的构建工具(http://requirejs.org/docs/optimization.html)来做这样的事情。在浏览完文档并为自己尝试构建工具之后,我发现它只是将所有defines组合到一个文件中。我在这里错过了什么吗?这不是非常有用。

UMD模式似乎是规范化您的代码以使用AMD,Node和浏览器(http://know.cujojs.com/tutorials/modules/authoring-umd-moduleshttps://github.com/umdjs/umd)。这是否意味着我使用的每个AMD文件都必须转换为UMD?这似乎很头疼。

我偶然发现了uRequire(http://urequire.org/),这似乎是我正在寻找的答案。能够从AMD或CommonJS模式构建UMD代码。

这是一个一直困扰着我的问题。 UMD看起来很酷,但似乎挂机很容易使您的代码可用于浏览器。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

关于RequireJS优化器的用处,我使用RequireJS rjs优化器超过一年来创建必须组合(并同步)的模块包。

这非常有用,因为我节省了请求的数量,也节省了异步开销,其中require需要弄清楚所有依赖树,因为这根本不需要发生。

例如,如果您考虑更广泛的模块,也就是子应用程序甚至功能,您可以只为您的应用程序提供另一个讲座,而不是加载40个以上的requirejs模块,那么您将只加载5个子应用程序/功能,它们的每个块都将完全同步。

关于UMD和uRequire,我建议你看看https://github.com/systemjs/systemjs - 这似乎是一个聪明的方法。然而uRequire似乎也很好。