我最近下载了最新版本的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作为我的模块的依赖项。
最后,如果其他情况都没有完成,那么我可以直接从全局范围(浏览器中的窗口对象)使用它
答案 0 :(得分:9)
您可以使用requirejs将其拉入而不是使用全局范围:
require.config({
paths: {
"moment": "path/to/moment",
}
});
define(["moment"], function (moment) {
moment().format();
});
答案 1 :(得分:4)
这真的不是答案,而是对问题的理解:
还有一个有说服力的解释,说明为什么会发生弃用,或者说新的解释是什么。具体来说,不是段落说'如果你以旧方式去做,它会以一种微妙的方式打破'。最接近的是一个错误报告,使用node,在全局命名空间(https://github.com/moment/moment/issues/1214)中定义了一个符号,这主要是哲学。
弃用是因为使用,所以人们不清楚为什么。它似乎需要在安装时修复。
在镜像require.js样板之外,任何聊天节点上都没有人解释过它。评论似乎继续作为“这样做,它的工作原理”。样板文件未涵盖所有用户。
一些失败的行包括简单的构造函数,如moment(value)
,这是库的整个点。
似乎从版本2.9.0到2.10.0的次要版本升级可能会强制弃用代码中断,至少对于使用ECMAScript和回退的用户而言。恢复到2.9.0将允许您继续工作。如果你只有相关的moment.duration.fn破损消失,你可以升级到2.10.1或以上。