2013-07-29 50 views
5

是否可以从优化的RequireJS/r.js包中导入单个模块?RequireJS - 在r.js优化包中导入模块

我有一个JavaScript项目分为两个独立的组件 - “在MyLibrary”和“MyApplication的”

在MyLibrary由两个独立的模块,“MyModule1”和“MyModule2”。

在开发模式下,我可以使用RequireJS和MyApplication中的普通定义(['MyLibrary/MyModule1'],function(){})语法导入每个模块。

但是,一旦通过r.js运行MyLibrary,这似乎不再可能 - 似乎没有办法直接引用内部模块了吗?

我可以从编译/优化的源代码中看到,每个模块都有define()块,但是我的应用程序中的RequireJS似乎无法直接引用它们。

这是可能的,还是我将需要捆绑我的整个应用程序到一个单一的文件才能工作。

编辑:RequireJS优化阶段正在我的Play框架中完成,我对构建配置有最小的控制。

({appDir: "javascripts", 
[info]   baseUrl: ".", 
[info]   dir:"javascripts-min", mainConfigFile: "javascripts/build.js", modules:   [{name: "main"}]}) 
+0

你可以发布你的r.js构建配置和任何其他相关的代码吗? – explunit

+0

构建文件由我正在使用的框架(Play 2.1)即时生成,并且没有太多它们。无论如何,我会加入它。 –

回答

2

为了使用库中的模块,您需要指示RequireJS如何找到这些模块。在main.js你需要有这样的事情:

require.config({ 
     // ... 
     paths: { 
      // ... 
      'MyLibraryBundleName': 'dist/MyLibraryFile', 
      // ... 
     }, 
     // ... 
     bundles: { 
      //... 
      'MyLibraryBundleName': ['MyLibrary/MyModule1', 'MyLibrary/MyModule2'], 
      //... 
     } 
    }); 

当MyApplication的被引用这样的模块:

define(['MyLibrary/MyModule1'],function(){}) 

...你提到,RequireJS将寻找“在MyLibrary/MyModule1 '并将其发现到“捆绑”部分,之后将检查'路径'部分以找到将被加载的实际文件'dist/MyLibraryFile'。