Как использовать `moment.js` с Meteor?

Я хочу использовать импульсы с метеор. Это пакет npm, поэтому, насколько я понимаю, его нельзя использовать с метеором, потому что метеорит использует его собственную систему пакетов. Итак, вот мои вопросы:

  • Кто-нибудь знает, как использовать импульсы с метеор?
  • Есть ли способ использовать пакеты npm с метеор?

2017 EDIT. Начиная с Meteor 1.4+, управление пакетами npm позволяет стандартным импортом модулей npm и импортом модулей Atmosphere.

Ответ 1

Для автономных js-библиотек, таких как moment.js, validate.js, underscore.string.js и т.д., вы можете просто удалить исходный файл в свою папку lib. Я использую client/lib для библиотек, которые будут использоваться только на клиенте (например, validate.js) и lib для библиотек, которые могут использоваться как клиентом, так и сервером (например, moment.js).

Если вы используете meteorite, вы можете воспользоваться atmosphere. Некоторые из того, что вы ищете, могут быть там.

Использование модулей npm из метеора - это то, о чем многие люди спрашивают (по уважительной причине). Здесь вы можете увидеть некоторые примечания хотя я слышал из первых рук, что способ передачи метеорных сообщений в пакеты npm значительно изменится.

Ответ 2

Тайлер, у меня был тот же вопрос и, наверняка, многие люди, которые пытались найти правильный ответ как можно скорее, потому что это легко сделать, даже если люди, которые впервые используют метеорит (как я) есть такие вопросы...

Управление пакетами Meteor

Прежде всего мы будем использовать NPM, мы будем использовать "Метеор", который использовался в Менеджменте пакетов Meteor AtmosphereJS. Кроме того, вы найдете другие удивительные пакеты здесь...

Итак, давайте начнем

Откройте ваш терминал и перейдите прямо туда, где находится ваше приложение, вам нужно установить правильные зависимости, чтобы сделать это:

Установить только зависимость

Это будет работать с Meteor 1. *

 meteor add momentjs:moment

Скомпилируйте приложение (вы можете сделать это сейчас или позже)

Это добавит этот пакет в ваше приложение, после этого скомпилируйте его с помощью

meteor

И перейдите в любой файл внутри вашего isClient, который является этим

if (Meteor.isClient) {   }

и вы можете использовать метод "момента" таким же образом, как это показано на их веб-сайте MomentJs!

Пример

чтобы дать вам пример, вот как я использую в своем приложении meteor

moment(dateToPass).fromNow();

потому что я использую Mongo, исходные данные выглядят следующим образом.

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

Мне нужно будет выполнить простой запрос поиска, чтобы получить его данные, а затем вы сможете обрабатывать свои данные следующим образом (этот код даст вам представление о том, как я использую значение 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;) спасибо!

Ответ 3

Вопрос был задан 3 года назад, в то время не было официального пакета из атмосферы. Поскольку вопрос был задан, все изменилось, и я указываю, когда пакет был добавлен в метеорные репозитории.

Установите официальный пакет из атмосферы

meteor add momentjs:moment

если вы используете typescript, просто

import * as moment from "moment/moment";

то в вашем коде

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

Ответ 4

2017 UPDATE. 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';

Метод 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).

Ответ 5

У меня была более сложная проблема, потому что:

  • Я хотел добавить 'pl' locale
  • Мне нужно было работать с 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, который ссылается на момент- 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');