我想通了: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 配置中将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>
真正应该像这样加载:
<script src="assets/js/vendor/requirejs/require.js" data-main="assets/js/dist/app"></script>
天哪!