moment.js时刻未定义

时间:2014-07-01 23:44:22

标签: javascript ember.js momentjs

我刚刚在我的Ember.js应用程序中将表格moment@2.1.0更新为moment@2.7.0,现在当我将moment()输入控制台或将其包含在我的控制台中时,我收到错误脚本。

在我看到的文档中“从2.4.0开始,全球导出的时刻对象已被弃用”。我认为这是问题,但我不确定如何在ember中设置全局矩,以便我们的代码库中对moment()的所有引用都不会被破坏。

我已经尝试将我们正在执行的行('moment')更新为var moment = require('moment'),但它具有相同的结果。即使我在var moment = ... line之后直接调试一个调试器然后在控制台中输入moment(),我仍然得到那个时刻未定义。

2 个答案:

答案 0 :(得分:13)

您需要新文档的Browser部分。

因此...

<script src="moment.js"></script>
<script>
    moment().format();
</script>

<强> 修改

话虽如此,看起来这可能会给你同样的问题。

看起来Moment.js试图鼓励你使用包管理器,以免用全局变量弄脏命名空间。

继续阅读CommonJSAMD,并尝试将其计入当前筹码。

你应该做的事情如下:

var moment = require('moment');

moment().format();

但是为了使用require,您需要一个类似前面提到的模块系统。

<强> 但是

显而易见的解决方法是回滚您的Moment.js版本,只要您不需要新功能即可。对简单的时间/日期库进行更新有多重要?

答案 1 :(得分:0)

发生这种情况的时候,在moment.js之前已经有一些软件包管理器/加载器了:

moment detects a package manager

您可以看到瞬间检测到

  1. module.exports
  2. define.amd

如果没有这样的内容,则分配global.moment

global变量实际上是windowfactory变量是下面的function,表示力矩范围的关闭。


两种可能性:

a)确保<script src="/scripts/moment-with-locales.js">之前没有CommonJS / SystemJS ...程序包管理器/加载器

b)按照@shennan's answer进行操作,然后由包管理器/加载器(例如,使用SystemJS:

SystemJS.import('/scripts/moment-with-locales.js').then(function(moment) {
    moment.locale('fr');
});