如何在流星上使用`moment.js`?

时间:2013-02-03 02:47:35

标签: meteor npm momentjs

我想在流星上使用momentjs。这是一个npm包,所以根据我的理解,它不能用于meteor,因为meteor使用它自己的包系统。所以这是我的问题:

  • 有没有人知道如何在流星上使用momentjs?
  • 有没有办法在流星上使用npm包?

2017年编辑:从Meteor 1.4+开始,npm包管理允许标准导入npm模块和命名的Atmosphere模块导入。

5 个答案:

答案 0 :(得分:21)

泰勒,我有同样的问题,肯定有很多人试图尽快找到正确的答案,因为这是一件容易的事,即使是第一次使用流星的人(就像我一样)有这样的问题...

流星包管理

首先,我们将不会使用NPM,我们将使用Meteor包管理中使用的'Meteor'AtmosphereJS此外,你会在这里找到其他惊人的包......

让我们开始

打开您的终端并直接转到您的应用程序所在位置,您必须安装正确的依赖关系才能执行此操作:

安装唯一的依赖

这适用于Meteor 1。*

 meteor add momentjs:moment

编译您的应用(您现在或以后可以这样做)

这会将该软件包添加到您的应用程序,之后再使用

进行编译
meteor

然后转到isClient里面的任何文件,这是

if (Meteor.isClient) {   }

你可以像他们在网站MomentJs上展示的那样使用'时刻'方法!

示例

举个例子,这就是我在我的流星应用程序中使用的方式

moment(dateToPass).fromNow();

因为我使用Mongo,原始数据看起来像这样。

"createdAt" : ISODate("2014-12-12T04:01:21.768Z")

我将不得不做一个简单的查找查询来获取你的数据然后你可以像这样处理你的数据(这段代码会让你知道我如何使用包含Date的CreatedAt值()与MomentJS一起使用

var theItemsOnTheArray = SomeArray.find();
var dateToPass;
theItemsOnTheArray.forEach(function (item) { dateToPass = item.createdAt });
return moment(dateToPass).fromNow();

结果将是

// 3 years ago
// 2 years ago
// 21 hours ago
// in 3 hours
// 5 minutes ago

而不是:

Thu Dec 11 2014 20:14:08 GMT-0800 (PST)

我希望它对你们任何人都有用,如果你认为它有价值信息请+1;)谢谢!

答案 1 :(得分:9)

对于独立的js库,如moment.js,validate.js,underscore.string.js等,您只需将源文件放入lib文件夹即可。我将client/lib用于仅在客户端上使用的库(如validate.js),并将lib用于可供客户端和服务器使用的库(如moment.js)。

如果您使用meteorite,则可以使用atmosphere个套餐。你正在寻找的一些东西可能在那里。

使用来自meteor的npm模块是很多人都会问的问题(有充分理由)。你可以看到一些注释here,虽然我亲自听说流星与npm包的对话方式即将发生重大变化。

答案 2 :(得分:5)

问题在3年前被问到,那时大气层没有正式的包装。由于问题被问到了变化,我指出当包裹被添加到流星回购时。

从大气层安装官方软件包

meteor add momentjs:moment

如果你正在使用打字稿,只需

import * as moment from "moment/moment";

然后在你的代码中

let date = moment(<some date>).format('YYYY MM DD');

答案 3 :(得分:5)

2017年更新 - Meteor 1.4+使用npm模块与ES6。 OP来自2013年。

因此......

仅限npm的方式:

npmimport以这种方式安装moment到您的流星项目......

$ cd /path/to/my/meteor/project
$ npm install --save moment

// inside your Meteor app files...
import moment from 'moment';

带有全面导入的meteor-npm方式:(Thx,@DaveGööck)

$ cd /path/to/my/meteor/project
$ meteor npm install --save moment

// Inside Meteor app...
import * as moment from 'moment';
// OR
import moment from 'moment';

有关Meteor-npm包导入here的更多信息。 (具体提到moment)。

答案 4 :(得分:2)

我有一个更复杂的问题,因为:

  1. 我想添加'pl'locale
  2. 我需要它才能使用TypeScript
  3. 我很想听到有更简单的方法来实现这些目标,但是 以下是我最终使其工作的步骤:

    第1步。$ meteor add momentjs:moment

    步骤2.下载文件https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/moment/moment-node.d.ts并保存为./typings/moment/moment.d.ts(出于某种原因,仅执行typings install dt~moment--global --save将无法执行此操作,因为它只会下载一个几乎为空的https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/moment/moment.d.ts文件,它引用了包含真实内容的moment-node.d.ts文件。

    步骤3.将以下行附加到moment.d.ts:

    declare module "meteor/momentjs:moment" {
      var moment: moment.MomentStatic;
    }
    

    步骤4.下载https://raw.githubusercontent.com/moment/moment/develop/locale/pl.js(或任何其他语言环境)并将其保存在./client/lib/moment/locale/pl.js(或./client下面的任何其他目录)

    步骤5.编辑./client/lib/moment/locale/pl.js的开头和结尾,用开头的一行代替加载器代码

    import { moment } from 'meteor/momentjs:moment';
    

    步骤6.最后,您可以在任何模块中使用时刻js,只需附加

    import { moment } from "meteor/momentjs:moment";
    

    在文件的开头,然后你可以做例如:

    moment(ts).locale('pl').format('LLL');
    

    如果您使用的是'meteor / tap:i18n'软件包,则可能需要使用在启动期间传递给TAPi18n.setLanguage(...);的相同语言。您可能需要使用

    创建typings / globals / meteor_tap_i18n.d.ts文件
    declare module "meteor/tap:i18n" {
      export var TAPi18n : TAPi18nStatic;
      interface TAPi18nStatic{
         setLanguage(name:string):any;
         getLanguage():string;
         __(name:string,params?:any):string;
      }
    }
    

    然后您可以在

    模块中使用它
    import { TAPi18n } from 'meteor/tap:i18n';
    //...
    moment(ts).locale(TAPi18n.getLanguage()).format('LLL');