0

我正在构建一个库,它是一组包含模型视图控制器 Javascript 文件的文件夹。
每个文件都有使用 require 语法声明的依赖项:

define([
    'modules/moduleA/src/moduleAModel',
    'modules/moduleA/src/moduleAController',
], function(moduleAModel, moduleAController) {
    function moduleAView(param) {
        // ....
    }

我正在使用具有出色“grunt-contrib-requirejs”的 GruntJS 编译这个库。
问题是,作为一个库,没有入口点,也没有主入口。
我希望用户能够在需要时通过调用每个模块来使用它。

以下是我的问题:

首先:
如何为包含所有模块的库构建一个 javascript 文件而不一一声明它们?

其次:
我以后如何在另一个项目中重用这个库?我试过这个:

define(function(require) {
    var myLibrary = require('js/external-libs/myMinifiedLibrary.min');
    var moduleAV = new moduleAView();

但是当然第二行失败了,有没有类似的东西require(myLibrary.moduleAView)

你有什么建议?

更新:
我发现当你在一个文件上缩小所有模块时,你在一个页面上有多个定义,这被解释为 requirejs 的脚本,你必须加载它两次!(第一次是整个文件,第二次是你的主要文件)。然后我的“主要”或入口点是在最摇滚的答案上手动构建的(这仍然是一个问题)。所以我的第二个问题的解决方案是这篇文章:http:
//jaketrent.com/post/dynamically-require-optimized-modules-requirejs/

4

1 回答 1

1

我遇到了相反的问题:我希望用户拉库而不需要了解每个内部 模块

为此,我创建了一个返回父模块的入口点。然后,父母会根据需要处理推迟到孩子。

这个文件就是那个入口点。

如果我修改该文件以返回一个对象,则每个内部模块都将在加载的库中可用:

define(
    ["layout", "region"],
    function( Layout, Region ){
        return {
            "LayoutModule": Layout,
            "RegionModule": Region
        };
    }
);

我认为这就是你想要的:

  • r.js 优化器将所有内容构建到一个文件中
  • 其他代码仅包含库文件 ( require( "myLib" ))
  • 每个单独的模块都在响​​应对象 ( myLib.LayoutModule, myLib.RegionModule) 上可用。
于 2015-04-21T16:39:24.710 回答