Javascript moment.js moment未定义

Javascript moment.js moment未定义,javascript,ember.js,momentjs,Javascript,Ember.js,Momentjs,我刚更新了表格moment@2.1.0到moment@2.7.0在我的Ember.js应用程序中,现在我得到一个错误,当我在控制台中输入矩()或将其包含在脚本中时,没有定义矩 在我看到的文档中,“自2.4.0以来,全局导出的矩对象已被弃用”。我认为这是这里的问题所在,但我不确定如何在ember中全局设置矩,以便当前代码库中对矩()的所有引用都不会被破坏 我曾尝试将我们执行require('moment')的行更新为var moment=require('moment'),但结果相同。即使我将调试

我刚更新了表格moment@2.1.0到moment@2.7.0在我的Ember.js应用程序中,现在我得到一个错误,当我在控制台中输入矩()或将其包含在脚本中时,没有定义矩

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

我曾尝试将我们执行require('moment')的行更新为var moment=require('moment'),但结果相同。即使我将调试器直接放在var矩=。。。行,然后在控制台中输入力矩(),我仍然得到力矩未定义。

您想要新文档的部分

所以

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

但是


显而易见的修复方法是回滚您的Moment.js版本,只要您不需要新功能。简单的时间/日期库的更新到底有多重要?

当在矩.js之前有一些包管理器/加载程序已经启动时,就会发生这种情况:

你可以看到那一刻

  • module.exports
  • define.amd
  • 如果没有类似的情况,则分配
    global.moment

    全局
    变量实际上是
    窗口
    factory
    变量是下面表示力矩范围闭合的
    函数


    两种可能性:

    a) 确保没有CommonJS/SystemJS。。。

    b) 通过包管理器/加载器跟踪并加载瞬间,例如使用SystemJS:

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

    我需要时区,我们在东部时间晚上10点有一个付款截止,我需要验证截止时间是否与东海岸的时间相比较,而不是用户的本地机器。添加所有的逻辑来测试用户时区,然后调整日期/时间到东海岸,这样我就可以使用moment().tz(“America/New_York”)了。听起来,对moment所做的更改将导致更多的更新,而不是我自己完成逻辑的工作量。使用with应该不会太难实现。但是是的,如果你不想了解模块,也许仅仅使用JavaScript会更容易一些。它一定是其他东西,与requirejs冲突的东西?几天前,我用moment 2.7.0设置了一个页面进行测试,它实际上只包括控制台中的
    ,键入moment返回函数ref。键入moment()之前抛出的任何错误?也许检查一下网络日志,看看它是否被加载……你用的是什么口味的余烬?如果您使用的是eak或ember cli之类的构建,则需要在全局命名空间中启用
    moment
    。您已经这样做了吗?我将问题追溯到节点的loader require模块,该模块没有将上下文设置为矩所期望的内容。它将上下文设置为新上下文{}。然后在矩中,它检查变量global是否已定义,如果未定义(在我的例子中不是),则矩将在“this”对象上设置矩变量,该对象设置为context{},而不是window。目前正在确定结果,但不是在全球范围内。通过将moment.js中的最后一行从call(this)更改为call(window),它现在可以工作了。谢谢你,经过三个小时的努力,(a)的可能性对我有效。。。非常感谢。
    var moment = require('moment');
    
    moment().format();
    
    SystemJS.import('/scripts/moment-with-locales.js').then(function(moment) {
        moment.locale('fr');
    });