【问题标题】:Reduce duplication of code among RequireJS modules减少 RequireJS 模块之间的代码重复
【发布时间】:2013-09-05 06:09:19
【问题描述】:

我使用 RequireJS,并且我有以下 r.js 的构建配置文件。我的主文件是 app.js,它导入 jquery、ember、handlebars 和 underscore。我有另一个特定于我的应用程序页面的文件,名为 change_email.js。它也可以导入 ember。

({
    modules: [{
        name: 'js/app',
        // jQuery is included in the page
        exclude: ['jquery'],
        include: ['ember', 'handlebars', 'underscore']
    }, {
        name: 'js/change_email',
        exclude: ['jquery', 'js/app']
    }],
    mainConfigFile: 'requirejs_config.js'
})

我的 RequireJS 配置如下:

requirejs.config({
    paths: {
        'jquery': 'js/lib/jquery',
        'ember': 'js/lib/ember-1.0.0-rc.6.1',
        'handlebars': 'js/lib/handlebars-1.0.0-rc.4',
        'underscore': 'js/lib/underscore'
    },
    shim: {
        'underscore': {
            exports: '_'
        },
        'ember': {
            deps: ['jquery', 'handlebars'],
            exports: 'Ember'
        },
        'handlebars': {
            exports: 'Handlebars'
        }
    }
});

我注意到有时当我加载页面时,Ember 是从 app.js 运行的,有时它是从 ember-1.0.0-rc.6.1.js 运行的。我认为这是一个竞争条件。在 Ember 从ember-1.0.0-rc.6.1.js 运行的情况下,已经下载了两个包含 Ember 的文件app.jsember-1.0.0-rc.6.1.js。这似乎违反直觉,因为使用 RequireJS 的目标之一是减少下载的代码量。

我想过让 app.js 导入然后导出 ember 并让其他模块从 app.js 导入 Ember。我不太喜欢这个想法,因为它需要我将导入的样式更改为不自然的样式。

删除重复的最有效方法是什么?

【问题讨论】:

  • 虽然您的问题与这个问题不重复,但我的answer here 可能会给您一个可能的解决方法。
  • app.js 中有哪些模块?你能打开构建的文件并列出它们吗?

标签: javascript requirejs amd


【解决方案1】:

错误在于没有定义生产代码应该从哪里加载模块。通过在我的生产配置中定义以下内容,我一切正常。

requirejs.config({
    baseUrl: '/static',
    paths: {
        'jquery': 'js/app',
        'ember': 'js/app',
        'handlebars': 'js/app',
        'underscore': 'js/app',
        'underscore.string': 'js/app'
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    相关资源
    最近更新 更多