Moment.js - “通过全局范围访问时刻”警告消息

时间:2014-12-15 12:51:37

标签: javascript momentjs

我最近下载了最新版本的moment.js,并在尝试调用时开始显示以下消息,例如moment().add(1, 'day');

"Deprecation warning: Accessing Moment through the global scope is deprecated, and will be removed in an upcoming release."

哪种方法可以称之为时刻?

更新:找出问题

问题出现了,因为我的项目中有requirejs,而且我想告诉我,我应该将momentjs用作模块依赖项。

以下代码摘自momentjs v2.9.0

// CommonJS module is defined
if (hasModule) {
    module.exports = moment;
} else if (typeof define === 'function' && define.amd) {
    define('moment', function (require, exports, module) {
        if (module.config && module.config() && module.config().noGlobal === true) {
            // release the global variable
            globalScope.moment = oldGlobalMoment;
        }

        return moment;
    });
    makeGlobal(true);
} else {
    makeGlobal();
}

//And this is the 'makeGlobal' function. globalScope
function makeGlobal(shouldDeprecate) {
    /*global ender:false */
    if (typeof ender !== 'undefined') {
        return;
    }
    oldGlobalMoment = globalScope.moment;
    if (shouldDeprecate) {
        globalScope.moment = deprecate(
                'Accessing Moment through the global scope is ' +
                'deprecated, and will be removed in an upcoming ' +
                'release.',
                moment);
    } else {
        globalScope.moment = moment;
    }
}

因此,如果我在CommonJS环境中使用此库,那么我应该使用import语句。

如果我使用requirejs,那么我应该将momentjs作为我的模块的依赖项。

最后,如果其他情况都没有完成,那么我可以直接从全局范围(浏览器中的窗口对象)使用它

2 个答案:

答案 0 :(得分:9)

您可以使用requirejs将其拉入而不是使用全局范围:

require.config({
    paths: {
        "moment": "path/to/moment",
    }
});

define(["moment"], function (moment) {
    moment().format();
});

取自http://momentjs.com/docs/

答案 1 :(得分:4)

这真的不是答案,而是对问题的理解:

  1. 还有一个有说服力的解释,说明为什么会发生弃用,或者说新的解释是什么。具体来说,不是段落说'如果你以旧方式去做,它会以一种微妙的方式打破'。最接近的是一个错误报告,使用node,在全局命名空间(https://github.com/moment/moment/issues/1214)中定义了一个符号,这主要是哲学。

  2. 弃用是因为使用,所以人们不清楚为什么。它似乎需要在安装时修复。

  3. 在镜像require.js样板之外,任何聊天节点上都没有人解释过它。评论似乎继续作为“这样做,它的工作原理”。样板文件未涵盖所有用户。

  4. 一些失败的行包括简单的构造函数,如moment(value),这是库的整个点。

  5. 似乎从版本2.9.0到2.10.0的次要版本升级可能会强制弃用代码中断,至少对于使用ECMAScript和回退的用户而言。恢复到2.9.0将允许您继续工作。如果你只有相关的moment.duration.fn破损消失,你可以升级到2.10.1或以上。