2013-02-09 58 views
7

我有一个使用AngularJS编写的CoffeeScript项目。我的供应商的依赖关系是使用鲍尔安装和我的文件结构是这样的:使用Grunt连接并缩小RequireJS

- assets 
- js 
    - app 
    - model 
    - *.coffee 
    - factory 
    - *.coffee 
    ... 
    - app.coffee 
    - config.coffee 
    - routes.cofeee 
    - vendor 
    - angular 
    - lodash 
    ... 
    - dist 

我试图做的是以下几点:

  1. 我试图找出我如何使用RequireJS的r.js来优化我的应用程序文件,以便我基本上得到一个连接的文件,所有命令都很好(所以供应商依赖,我的配置和路线,以及他们我的应用程序文件)。
  2. 将其集成到我的Grunt文件中。

我使用r.js优化器尝试,但也许我已经是太傻了,因为所有的它似乎做的是我的应用程序文件(减去供应商的依赖关系)复制到dist文件夹;但是,它确实能够优化coffee生成的js文件。

有没有人有过这方面的经验?

+0

你在'r.js'串联使用'require.js'? – Trevor 2013-02-10 02:30:55

+0

我该怎么做? – 2013-02-10 07:03:39

回答

11

我想通了:r.js作品通过阅读你的mainConfigFile任何模块,您的配置内的名称,这里最重要的注意的是,r.js只看你的模块名字中的第一个require/define和熄灭找上门来;因此,举例来说,我有叫app一个名为模块:

require ['config'], (cfg) -> 
    require ['angular'], (A) -> 
    A.module cfg.ngApp, [] 

    require ['routes'],() -> 
     require [ 
     'factory/a-factory', 

     'service/a-service', 

     'controller/a-controller' 
     ],() -> 
     A.bootstrap document, [cfg.ngApp] 

的这里的问题是,r.js从来没有得到过第一require声明,因此串联不工作。当我把它改为,说(我app.coffee):

require ['config'], (cfg) -> 
    require ['angular'], (A) -> 
    A.module cfg.ngApp, [] 

    require ['bootstrap'], (bootstrap) -> 
     bootstrap() 

而且我bootstrap.coffee

define [ 
    'config', 
    'angular', 
    'routes', 

    'factory/a-factory', 

    'service/a-service', 

    'controller/a-controller' 
], (cfg, A, routes) -> 
    class Bootstrap 
    constructor:() -> 
     routes() 

     A.bootstrap document, [cfg.ngApp] 

这意味着我只需要在我r.js配置定义angularbootstrapincludes,然后r.js其余的将如下所示:

baseUrl: 'assets/js/app', 
mainConfigFile: 'assets/js/app/config.js', 
name: 'app', 
include: [ 
    '../vendor/requirejs/require', 
    'bootstrap' 
], 
out: 'assets/js/dist/app.js' 

A现在它一切正常! ~~可惜我不得不告诉r.js包括requirejs虽然,也许我在那里做了一些傻事?~~

Blimey,我就是这样一个丁格尔!

所以在我的HTML我装我的级联脚本:

<script src="assets/js/dist/app.js"></script> 

当它真的应该加载这样的:

<script src="assets/js/vendor/requirejs/require.js" data-main="assets/js/dist/app"></script> 

D'哦!

+4

感谢您不仅回答为您自己的问题提供答案,而且非常好的答案。 – ken 2013-05-15 16:37:50

1

来自r。JS DOC

https://github.com/jrburke/r.js/blob/master/build/example.build.js#L322

嵌套依赖关系可以用requireJS捆绑> V1.0.3

//Finds require() dependencies inside a require() or define call. By default 
//this value is false, because those resources should be considered dynamic/runtime 
//calls. However, for some optimization scenarios, it is desirable to 
//include them in the build. 
//Introduced in 1.0.3. Previous versions incorrectly found the nested calls 
//by default. 
findNestedDependencies: false,