【发布时间】:2013-01-18 02:31:12
【问题描述】:
我想将 momentjs 与流星一起使用。这是一个 npm 包,所以据我了解,它不能与流星一起使用,因为流星使用它自己的包系统。所以这是我的问题:
- 有谁知道将 momentjs 与流星一起使用的方法吗?
- 有没有办法将 npm 包与流星一起使用?
2017 年编辑:从 Meteor 1.4+ 开始,npm 包管理允许标准导入 npm 模块和命名导入 Atmosphere 模块。
【问题讨论】:
我想将 momentjs 与流星一起使用。这是一个 npm 包,所以据我了解,它不能与流星一起使用,因为流星使用它自己的包系统。所以这是我的问题:
2017 年编辑:从 Meteor 1.4+ 开始,npm 包管理允许标准导入 npm 模块和命名导入 Atmosphere 模块。
【问题讨论】:
Tyler,我也有同样的问题,并且肯定有很多人试图尽快找到正确的答案,因为这是一件容易的事情,即使是第一次使用流星的人(如我)有这样的问题...
流星包管理
首先,我们将不会使用 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 ;) 谢谢!
【讨论】:
对于像 moment.js、validate.js、underscore.string.js 等独立的 js 库,您可以将源文件放到您的 lib 文件夹中。我将 client/lib 用于仅用于客户端的库(如 validate.js),lib 用于客户端和服务器均可使用的库(如 moment.js)。
如果您使用meteorite,则可以利用atmosphere 软件包。您正在寻找的一些内容可能在其中。
使用来自流星的 npm 模块是很多人询问的问题(有充分的理由)。你可以看到一些注释here,尽管我亲耳听说流星与 npm 包的对话方式即将发生重大变化。
【讨论】:
mrt add moment,你应该完成了。 Meteor 开发团队目前正在开发他们自己的基于 Meteorite 的包管理器,因此使用大气包也应该是未来的一个好习惯。至于 npm 包,可以在 Meteor 中使用它们,但您必须小心确保包可以在服务器上的 Meteor 纤程中工作。
mrt add 之前,您可能需要做一些功课。
2017 更新 - Meteor 1.4+ 在 ES6 中使用 npm 模块。 OP是2013年的。
这样……
只有 npm 的方式:
以这种方式使用npm 和import 将moment 安装到您的meteor 项目...
$ 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 包导入here。 (特别提到moment)。
【讨论】:
meteor npm install --save moment 安装 moment 并通过 import * as moment from 'moment'; 导入它来使用流星 1.5.1 的导入 - 提到的链接也已过时。
这个问题是3年前问的,当时还没有大气的官方包。自从提出问题以来,事情发生了变化,我指出了该包何时添加到流星存储库中。
从大气中安装官方包
meteor add momentjs:moment
如果您使用的是打字稿,则只需
import * as moment from "moment/moment";
然后在你的代码中
let date = moment(<some date>).format('YYYY MM DD');
【讨论】:
我有一个更复杂的问题,因为:
我很想知道有一种更简单的方法可以实现这些目标,但是 以下是我为最终使其工作而采取的步骤:
第 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(...); 的相同语言。您可能需要使用
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');
【讨论】: