Javascript requirejs,almond:使用almond构建的独立模块加载所有依赖项,但不执行主代码

Javascript requirejs,almond:使用almond构建的独立模块加载所有依赖项,但不执行主代码,javascript,requirejs,amd,r.js,Javascript,Requirejs,Amd,R.js,我正在尝试用almond构建一个独立的模块,这是我的设置。问题在下面 缩写目录结构为: |-static |-core |-js |-require.js |-almond.js |-common.js |-app.build.js |-app |-myApp.js |-vendor |-js |-jquery.js |-boo

我正在尝试用almond构建一个独立的模块,这是我的设置。问题在下面

缩写目录结构为:

|-static
   |-core
      |-js
        |-require.js
        |-almond.js
        |-common.js
        |-app.build.js
        |-app
          |-myApp.js

   |-vendor
      |-js
        |-jquery.js
        |-bootstrap.js
        |-fancybox.js
common.js的缩写内容:

require.config({
    baseUrl: "/static/core/js",
    paths: {
        'jquery':'../../vendor/jquery/1.7.2/jquery',
        'bootstrap':'../../vendor/bootstrap/2.2.2/js/bootstrap',
        'fancybox':'../../vendor/fancybox/2.0.6/jquery.fancybox',
    },
    shim: {
        'bootstrap':['jquery'],
        'fancybox': ['jquery'],
        'app/messages': ["jquery"],
    },
    waitSeconds: 12
});
app/myApp.js的缩写内容是的,我知道我正在污染全局命名空间:

define(function (require) {
    var $ = require('jquery');
    require('fancybox');
    require('app/messages');

    //all myApp's code here
    console.log('Is this thing on?')
});
我的构建文件:app.build.js:

mainConfigFile: 'common.js',
removeCombined: true,
skipDirOptimize: true,
wrapShim: false,
wrap: false,

modules: [
    {
        name: 'almond',
        include: ['app/myApp'],
        out: ['myApp.js'
    },

],
更新添加的html: django模板HTML的底部:

{% require_module 'myApp' %}
模板标记转换为:

<script src="/static/core/js/myApp.js"></script>
当我执行构建时,我得到了包含almond的完整构建、所有myApp的依赖项以及所有myApp的代码。但是,依赖项加载并执行它们的代码,但myApp的代码不执行

我希望在myApp的依赖项加载之后,我会看到这个东西是开着的吗?请在控制台中查看上面的app/myApp.js,但没有骰子


注意:我实际上是在使用django require构建独立模块,但我认为app.build.js与它所做的非常接近,并且考虑到最终的myApp.js文件包含所有必要的部分,它应该不会有什么区别。

尝试将您的define类更改为require类:

require( ["jquery", "fancybox", "app/messages"], function ($, fancybox, messages) {

    //all myApp's code here
    console.log('Is this thing on?')
});
将包含require.config的文件放在使用require的任何其他文件之上。然后确保包含新require函数的文件位于HTML中以供引用


至少在过去,我就是这样使用require的。

你能给我们展示一下加载整个东西的HTML吗?@Louis我已经在r.js生成的最后一个包中添加了htmlIs common.js?在这一点上,不,我试图创建一个require['common'],函数'common'{..define callback..};但这导致文件中只有杏仁。我将在回调中尝试并只需要它。@Louis我尝试添加common,但结果相同。我所做的第一件事是使用您的define版本,我得到了相同的结果。我还尝试将require.config放在app/myApp.js中,但同样没有区别。此外,所有依赖项都会加载和执行,因此不应该是配置问题。谢谢你的建议。哎呀,我没领会你的意思。将“定义”更改为“需要”,现在就尝试。谢谢!这就成功了!!你知道为什么require有效而define无效吗?当使用witch时,它看起来非常随意。这是因为没有任何东西可以启动代码的加载。定义只定义一个模块。必须有一个显式或隐式的初始需求。您可以在为r.js提供的构建配置中使用insertRequire。它接受一个模块名数组。只要把你的主模块放在那里,就会做QBM5建议的同样的事情。@Louis,这是有道理的。