我刚刚在我的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(),我仍然得到那个时刻未定义。
答案 0 :(得分:13)
您需要新文档的Browser部分。
因此...
<script src="moment.js"></script>
<script>
moment().format();
</script>
<强> 修改 强>
话虽如此,看起来这可能会给你同样的问题。
看起来Moment.js试图鼓励你使用包管理器,以免用全局变量弄脏命名空间。
你应该做的事情如下:
var moment = require('moment');
moment().format();
但是为了使用require
,您需要一个类似前面提到的模块系统。
<强> 但是 强>
显而易见的解决方法是回滚您的Moment.js版本,只要您不需要新功能即可。对简单的时间/日期库进行更新有多重要?
答案 1 :(得分:0)
发生这种情况的时候,在moment.js之前已经有一些软件包管理器/加载器了:
您可以看到瞬间检测到
module.exports
define.amd
如果没有这样的内容,则分配global.moment
。
global
变量实际上是window
。
factory
变量是下面的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');
});