我正在构建一个库,它是一组包含模型视图控制器Javascript文件的文件夹 每个文件都有使用require语法声明的依赖项:
define([
'modules/moduleA/src/moduleAModel',
'modules/moduleA/src/moduleAController',
], function(moduleAModel, moduleAController) {
function moduleAView(param) {
// ....
}
我正在使用GruntJS和伟大的" grunt-contrib-requirejs"来编译这个库。
问题是,作为一个图书馆,没有入口点,没有主要的
我希望用户能够在需要时通过调用每个模块来使用它。
以下是我的问题:
首先
如何为包含所有模块的库构建一个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/
答案 0 :(得分:1)
我遇到了相反的问题:我希望用户拉出库,不必须知道每个internal module。
为实现这一目标,我创建了一个返回parent module的入口点。然后父母会根据需要处理推迟给孩子的事。
This file就是切入点。
如果我修改了该文件以返回一个对象,则每个内部模块都可以在加载的库中使用:
define(
["layout", "region"],
function( Layout, Region ){
return {
"LayoutModule": Layout,
"RegionModule": Region
};
}
);
我认为这就是你想要的:
require( "myLib" )
)myLib.LayoutModule
,myLib.RegionModule
)上提供了每个单独的模块。