【问题标题】:Use requirejs in gruntjs to build a library, and use it in other projects在 gruntjs 中使用 requirejs 构建一个库,在其他项目中使用
【发布时间】:2015-04-21 16:23:08
【问题描述】:

我正在构建一个库,它是一组包含模型视图控制器 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/

【问题讨论】:

    标签: javascript gruntjs requirejs grunt-contrib-requirejs requirejs-optimizer


    【解决方案1】:

    我遇到了相反的问题:我希望用户提取库,而必须知道每个 internal module

    为此,我创建了一个返回 parent module 的入口点。然后,父级会根据需要处理对子级的延迟。

    This file 是那个入口点。

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

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

    我想这就是你想要的:

    • r.js 优化器将所有内容构建到一个文件中
    • 其他代码只包含库文件 (require( "myLib" ))
    • 每个单独的模块都可用于响应对象(myLib.LayoutModulemyLib.RegionModule)。

    【讨论】:

    • 真的很有趣,它回答了我的第二个问题,但我仍然必须在入口点声明每个模块。这样做的问题是我有一个包含许多文件的库核心文件夹,而且在每个可选模块上我都有很多文件,每次我想添加一个模块时添加一个新行会破坏我的代码是模块化
    • @Tim 听起来你在说:“我想要一个依赖加载器来加载我所有的依赖,但我不想定义我的依赖!”您的代码仍然是模块化的,但您必须以某种方式告诉您的库它需要哪些模块!
    • @SLTMikey 我可能不太清楚,我不想在构建库时“手动”定义我的依赖项,我希望将所有内容都放在一个文件中。此外,我的每个文件都很好地定义了我的依赖关系,问题是我有很多文件。我希望在使用这个库时能够使用这些模块。
    • @rockerest 顺便说一句,我没有成功使用 myLib.LayoutModule,我可能做错了什么,我应该使用带有 AMD wrap 的 require 优化器吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2017-05-17
    • 2015-04-22
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多