在需要模块之前,使用require.js运行公共代码

时间:2014-11-07 18:02:30

标签: javascript requirejs momentjs

我在国际网站的几个不同页面上使用Moment.js。每个页面都在片刻中使用require.js。

Moment允许您set the locale以该语言环境格式显示日期。但是,此代码必须在每个页面上运行Moment(因为我不确定用户首先加载哪个页面)。

var Moment = require('moment');
// configure locale

我想要做的是移动代码以将区域设置配置为类似预先要求的步骤,这样我就不必记住在每个页面上配置区域设置(并且它变得更加干燥)。所以我所要做的就是

var Moment = require('moment');

并且预先要求步骤已经配置了区域设置。

这可能吗?

2 个答案:

答案 0 :(得分:4)

是的,有可能,像这样:

  1. 创建一个名为moment-configured的模块:

    define(['moment'], function (moment) {
        // Call what you need to call to configure moment...
        return moment;
    });
    
  2. 使用map配置,以便加载时刻的每个人都真正加载moment-configured模块,而moment-configured加载真实的moment

    map: {
        '*': {
            moment: 'moment-configured'
        },
        'moment-configured': {
             moment: 'moment'
        }
    }
    
  3. 此方法改编自RequireJS' documentation中有关如何使用noConflict自动加载jQuery的示例。使用此地图配置,所有需要moment的模块都将获得moment-configured,但moment-configured除外,它将获得真实的moment

答案 1 :(得分:-1)

可以为require config对象提供一个回调,以便在加载依赖项之后和定义require()之前执行:

requirejs.config({
    deps: ['moment'],
    callback: function (moment) {
        console.log(moment().format());
    }
});