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

Use require.js to run common code before module is required

本文关键字:js require 运行 代码 请使用 模块      更新时间:2023-09-26

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

Moment允许您将区域设置为以该区域设置格式显示日期。然而,此代码必须在加载Moment的每个页面上运行(因为我永远不确定用户首先加载哪个页面)。

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

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

var Moment = require('moment');

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

这可能吗?

是的,这是可能的,就像这样:

  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'
        }
    }
    

该方法改编自RequireJS文档中关于如何使用noConflict自动加载jQuery的示例。使用此映射配置,除了moment-configured将获得真正的moment外,所有需要moment的模块都将获得moment-configured

require-config对象可以在加载依赖项之后和定义require()之前得到一个要执行的回调:

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