Coffeescript 用Grunt连接并缩小需求
我有一个用CoffeeScript编写的项目,它使用AngularJS。我的供应商依赖项是使用Bower安装的,我的文件结构如下:Coffeescript 用Grunt连接并缩小需求,coffeescript,requirejs,gruntjs,Coffeescript,Requirejs,Gruntjs,我有一个用CoffeeScript编写的项目,它使用AngularJS。我的供应商依赖项是使用Bower安装的,我的文件结构如下: - assets - js - app - model - *.coffee - factory - *.coffee ... - app.coffee - config.coffee - routes.cofeee - vendor - angular - lodash ... -
- assets
- js
- app
- model
- *.coffee
- factory
- *.coffee
...
- app.coffee
- config.coffee
- routes.cofeee
- vendor
- angular
- lodash
...
- dist
<script src="assets/js/vendor/requirejs/require.js" data-main="assets/js/dist/app"></script>
我想做的是:
r.js
优化我的应用程序文件,这样我就可以得到一个完全有序的连接文件(因此供应商依赖性、配置和路由,以及我的应用程序文件)r.js
Optimizer,但可能我太傻了,因为它似乎只是将我的应用程序文件(减去供应商依赖项)复制到dist文件夹中;但是,它确实能够优化coffee
生成的js
文件
有人对此有经验吗?我想:
r.js
通过阅读您的maincigfile
和您在配置中命名的任何模块来工作,这里需要注意的是,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()
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
配置中将angular
和bootstrap
定义为includes
,然后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'
现在一切都好了~~遗憾的是,我不得不告诉r.js
加入requirejs
,也许我做了一些愚蠢的事情~~
哎呀,我真是个卑鄙小人强>
因此,在我的HTML中,我将连接脚本加载为:
<script src="assets/js/dist/app.js"></script>
实际上,它应该像这样加载:
- assets
- js
- app
- model
- *.coffee
- factory
- *.coffee
...
- app.coffee
- config.coffee
- routes.cofeee
- vendor
- angular
- lodash
...
- dist
<script src="assets/js/vendor/requirejs/require.js" data-main="assets/js/dist/app"></script>
哦 来自r.js文档 嵌套依赖项可以捆绑在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,
您是否将
require.js
与r.js
结合使用?感谢您不仅返回,为您自己的问题提供了答案,而且还提供了一个非常好的答案。