我想在Meteor中使用momentjs。 由于Meteor使用自己的包系统,momentjs是一个npm包,所以据我了解,它不能用于Meteor。 所以这里有我的问题:
- 有人知道如何在Meteor中使用momentjs吗?
- 是否有一种方法可以在Meteor中使用npm包?
2017年编辑: 自Meteor 1.4+起,npm包管理允许标准导入npm模块和命名导入Atmosphere模块。
Tyler,我有同样的问题,肯定有很多人都想尽快找到正确答案,因为这是一件容易的事情,即使第一次使用Meteor的人(像我)也会有这种问题...
Meteor包管理
首先,我们不会使用NPM,而是使用AtmosphereJS从Meteor包管理器中获取。在这里,您还可以找到其他令人惊叹的软件包...
让我们开始吧
打开终端并直接进入应用程序所在的位置,您必须安装正确的依赖项才能这样做:
安装唯一的依赖项
这将适用于Meteor 1.*
meteor add momentjs:moment
编译您的应用程序(现在或稍后都可以)
这将向您的应用程序中添加该软件包,之后再次使用编译器进行编译。
meteor
并且进入您的isClient中的任何文件,就像这样
if (Meteor.isClient) { }
moment(dateToPass).fromNow();
"createdAt" : ISODate("2014-12-12T04:01:21.768Z")
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)
对于像moment.js、validate.js、underscore.string.js等独立的js库,您可以将源文件直接放入lib
文件夹中。我使用client/lib
存放仅在客户端使用的库(如validate.js),而使用lib
存放可能由客户端和服务器同时使用的库(如moment.js)。
如果您使用meteorite,您可以利用atmosphere packages。这些packages中可能包含了您需要的一些内容。
使用meteor从npm模块中获取modules是很多人问及的问题(有很好的原因)。您可以看到一些注释here,但我听说meteor与npm packages通信的方式即将发生重大变化。
2017年更新 - Meteor 1.4+使用带有ES6的npm
模块。OP来自2013年。
因此...
仅限于npm的方法:
使用npm
将moment
安装到您的Meteor项目中,并以以下方式进行import
...
$ cd /path/to/my/meteor/project
$ npm install --save moment
// inside your Meteor app files...
import moment from 'moment';
使用meteor-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
)。
meteor npm install --save moment
,并通过import * as moment from 'moment';
导入它。此外,提到的链接已经过时了。 - Dave Gööck这个问题是3年前提出的,当时还没有官方的atmosphere软件包。随着时间的推移,情况发生了变化,我指出当软件包被添加到meteor repos时。
安装来自atmosphere的官方软件包。
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';
import { moment } from "meteor/momentjs:moment";
moment(ts).locale('pl').format('LLL');
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');