10

我想将momentjs与流星一起使用。这是一个 npm 包,所以据我了解,它不能与流星一起使用,因为流星使用它自己的包系统。所以这是我的问题:

  • 有谁知道将momentjs与流星一起使用的方法?
  • 有没有办法将 npm 包与流星一起使用?

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

4

5 回答 5

22

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

流星包管理

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

所以让我们开始吧

打开您的终端并直接转到您的应用程序所在的位置,您必须安装正确的依赖项才能这样做:

安装唯一的依赖

这将适用于 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 ;) 谢谢!

于 2014-12-12T05:11:47.650 回答
10

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

如果你使用陨石,你可以利用大气包。您正在寻找的一些东西可能在那里。

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

于 2013-02-03T03:09:25.557 回答
6

2017 更新- Meteor 1.4+ 使用npm带有 ES6 的模块。OP是2013年的。

因此...

仅 npm 的方式:

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

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

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

使用一揽子导入的流星-npm 方式:(谢谢,@Dave Göö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 包导入的更多信息,请点击此处。(特别提到moment)。

于 2017-03-19T20:46:54.293 回答
5

这个问题是3年前问的,当时还没有大气的官方包。由于提出了问题,事情发生了变化,我指出了该包何时添加到流星回购中。

从大气安装官方包

meteor add momentjs:moment

如果您使用的是打字稿,只需

import * as moment from "moment/moment";

然后在你的代码中

let date = moment(<some date>).format('YYYY MM DD');
于 2016-07-02T01:51:13.253 回答
2

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

  1. 我想添加“pl”语言环境
  2. 我需要它来使用 TypeScript

我很想听听有一种更简单的方法可以实现这些目标,但我采取了以下步骤来最终使其发挥作用:

第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 步。最后你可以在任何模块中使用 moment 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');
于 2016-06-20T10:40:41.000 回答