#typescript #meteor #ecmascript-6
Вопрос:
Мне нужно использовать $lookup
оператора Монго, чтобы добавить некоторые связанные данные в коллекцию метеоритов, поэтому я установил tunguska:reactive-aggregate
пакет из AtmosphereJs (https://atmospherejs.com/tunguska/reactive-aggregate). Следуя его документации, вот как я его использую:
import { ReactiveAggregate } from 'meteor/tunguska:reactive-aggregate';
Meteor.publish("orders", function () {
ReactiveAggregate(this, OrdersCollection, [{
$lookup: {
from: "customers",
localField: "customer_id",
foreignField: "wooCommerce_id",
as: "customerInfo"
}
}]);
})
Это работает, и я получаю информацию о клиенте в customerInfo
области сбора. Однако компилятор Typescript жалуется на эту ошибку:
error TS2307: Cannot find module "meteor/tunguska:reactive-aggregate"
Есть ли какой-нибудь способ исправить эту ошибку? Я думаю, что это вопрос добавления этого пакета в список «обнаруженных», как, например, при импорте meteor/check
, но я не знаю, как это сделать. Приложение работает так, как ожидалось, но мне не нравится отмечать файлы в среде IDE, когда ошибок быть не должно…
Спасибо!
Комментарии:
1. Typescript ищет файл типизации, вы, вероятно, можете создать его вручную
2. Привет, я думаю, что проблема в том, что, помимо отсутствия типов, он не может найти ни одного модуля с таким именем ни в одной папке, контролируемой компилятором. Я проверил как местный
npm_modules
, так и метеоритный (.meteor/local/build/programs/server/npm/node_modules
) и ничего не смог найти о посылке…3. Пакетов Meteor в
node_modules
каталоге нет. Вам нужно проверить.meteor/packages
имя пакета или запуститьmeteor add tunguska:reactive-aggregate
, чтобы убедиться, что пакет присутствует. Также вам следует запустить проект Meteor с помощью Meteormeteor run
.
Ответ №1:
Изучив структуру папок проекта Meteor, я думаю, что понимаю, что происходит:
- Как объяснено в комментариях выше, пакеты Meteor находятся не внутри
node_modules
, а внутри.meteor/local/build/programs/server/packages
. Похоже, что Meteor объединяет эти пакеты при компиляции приложения, поэтому он работает, когда вы импортируете и используете некоторые из них, например:
import { ReactiveAggregate } from 'meteor/tunguska:reactive-aggregate';
Meteor.publish("orders", function () {
ReactiveAggregate(this, OrdersCollection, [{
...
}]);
});
Единственная проблема с этим заключается в том, что IDE жалуется, что не может найти модуль, поэтому, чтобы исправить это, нам нужно добавить файл типов. Поскольку их нет, я постараюсь создать один, когда у меня будет больше свободного времени.
Ваше здоровье!