Ahm*_*man 7 coffeescript requirejs gruntjs
我有一个用CoffeeScript编写的项目,它使用AngularJS.我的供应商依赖是使用Bower安装的,我的文件结构如下:
- assets
- js
- app
- model
- *.coffee
- factory
- *.coffee
...
- app.coffee
- config.coffee
- routes.cofeee
- vendor
- angular
- lodash
...
- dist
Run Code Online (Sandbox Code Playgroud)
我想要做的是以下内容:
r.js
来优化我的应用程序文件,这样我基本上得到一个所有有序的连接文件(所以供应商依赖,我的配置和路由,以及他们我的应用程序文件).我已经尝试过使用r.js
优化器,但也许我太傻了,因为它似乎只是将我的应用程序文件(减去供应商的依赖性)复制到dist文件夹中; 但是,它确实可以优化coffee
生成的js
文件.
有没有人有这方面的经验?
Ahm*_*man 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]
Run Code Online (Sandbox Code Playgroud)
这里的问题是,r.js
从未超过第一个require
语句,因此连接不起作用.当我改变它时,说(我的app.coffee
):
require ['config'], (cfg) ->
require ['angular'], (A) ->
A.module cfg.ngApp, []
require ['bootstrap'], (bootstrap) ->
bootstrap()
Run Code Online (Sandbox Code Playgroud)
我的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]
Run Code Online (Sandbox Code Playgroud)
这意味着我只需要定义angular
和bootstrap
在我r.js
的配置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'
Run Code Online (Sandbox Code Playgroud)
现在一切正常!~~虽然我不得不说r.js
,这是一种耻辱requirejs
,也许我在那里做了些傻事?~~
Blimey,我真是个dingus!
所以在我的HTML中我加载了我的连接脚本:
<script src="assets/js/dist/app.js"></script>
Run Code Online (Sandbox Code Playgroud)
什么时候它应该像这样加载:
<script src="assets/js/vendor/requirejs/require.js" data-main="assets/js/dist/app"></script>
Run Code Online (Sandbox Code Playgroud)
D'哦!
归档时间: |
|
查看次数: |
4296 次 |
最近记录: |