matteodem / meteor-easy-search

Easy-to-use search for Meteor with Blaze Components
MIT License
435 stars 68 forks source link

Cannot find module 'meteor/easy:search'/ 'meteor/easysearch:elasticsearch'. #626

Closed Callmoon closed 7 years ago

Callmoon commented 7 years ago

Hello together,

my goal is to use elasticsearch inside the meteor-angular2.0 example by Urigo (see link below).

I try to implement the easysearch:elasticsearch atmosphere package from https://atmospherejs.com/easysearch/elasticsearch# into my existing project which is based on https://github.com/Urigo/meteor-angular2.0-socially .

After I used meteor add easysearch:elasticsearch I receive always the Cannot find module errorif I try to implement it (serverside/clientside/both - doesnt matter). Here my code of implementation in the both/collections/cases.collections.ts file:

import { MongoObservable } from "meteor-rxjs";
import { Meteor } from 'meteor/meteor';
import { Index } from 'meteor/easy:search' // gives error
import { ElasticSearchEngine } from 'meteor/easysearch:elasticsearch' //gives error

import { Case } from "../models/case.model";

export const Cases = new MongoObservable.Collection<Case>("cases");

// const CasesIndex = new Index({
//   collection: Cases,
//   fields: ['name', 'description'],
//   engine: new ElasticSearchEngine({
//     body: () => { } // modify the body that's sent when searching
//   })

function loggedIn() {
  return !!Meteor.user();
}

Cases.allow({
  insert: loggedIn,
  update: loggedIn,
  remove: loggedIn
});

My .meteor/packages file has following content:

# Meteor packages used by this project, one per line.
# Check this file (and the other files in this directory) into your repository.
#
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.

meteor-base@1.0.4             # Packages every Meteor app needs to have
mobile-experience@1.0.4       # Packages for a great mobile UX
mongo@1.1.14                   # The database Meteor supports right now
reactive-var@1.0.11            # Reactive variable for tracker
tracker@1.1.1                 # Meteor's client-side reactive programming library

standard-minifier-css@1.3.2   # CSS minifier run for production mode
standard-minifier-js@1.2.1    # JS minifier run for production mode
es5-shim@4.6.15                # ECMAScript 5 compatibility for older browsers.

angular2-compilers
practicalmeteor:mocha
xolvio:cleaner
hwillson:stub-collections
dispatch:mocha-phantomjs
shell-server@0.2.1
accounts-password
anti:fake
tmeasday:publish-counts
check
email
jalik:ufs
jalik:ufs-gridfs
mickaelfm:vermongo
easysearch:elasticsearch

Additionally (if it helps) here my package.json:

{
  "name": "a angular2 elasticsearch site",
  "private": true,
  "scripts": {
    "start": "meteor run",
    "start:prod": "meteor run --production",
    "build": "meteor build ./build/",
    "clear": "meteor reset",
    "meteor:update": "meteor update --all-packages",
    "test": "meteor test --driver-package practicalmeteor:mocha",
    "test:ci": "meteor test --once --driver-package dispatch:mocha-phantomjs"
  },
  "devDependencies": {
    "@types/chai": "3.5.2",
    "@types/meteor": "^1.4.1",
    "@types/mocha": "2.2.41",
    "chai": "3.5.0",
    "chai-spies": "0.7.1",
    "meteor-node-stubs": "0.2.4"
  },
  "dependencies": {
    "@angular/animations": "^4.4.3",
    "@angular/common": "^4.4.3",
    "@angular/compiler": "^4.4.3",
    "@angular/core": "^4.4.3",
    "@angular/forms": "^4.4.3",
    "@angular/http": "^4.4.3",
    "@angular/material": "2.0.0-beta.8",
    "@angular/platform-browser": "^4.4.3",
    "@angular/platform-browser-dynamic": "^4.4.3",
    "@angular/router": "^4.4.3",
    "@types/node": "^7.0.22",
    "@types/underscore": "^1.8.1",
    "angular2-file-drop": "^0.2.0",
    "angular2-google-maps": "0.17.0",
    "angular2-meteor": "0.7.1",
    "angular2-meteor-accounts-ui": "1.0.0",
    "angular2-meteor-polyfills": "0.2.0",
    "angular2-meteor-tests-polyfills": "0.0.2",
    "babel-runtime": "6.23.0",
    "bcrypt": "=1.0.2",
    "gm": "^1.23.0",
    "hammerjs": "^2.0.8",
    "meteor-node-stubs": "0.2.11",
    "meteor-rxjs": "0.4.7",
    "meteor-typings": "1.3.1",
    "ng2-drag-drop": "^2.0.1",
    "ng2-pagination": "^2.0.1",
    "reflect-metadata": "0.1.10",
    "ng2-cytoscape": "0.4.0",
    "rxjs": "5.4.0",
    "zone.js": "0.8.11"
  }
}
matteodem commented 7 years ago

You have to add the meteor packages that you want to add into your .packages file or use meteor add.

Callmoon commented 6 years ago

@matteodem thanks for the reply - in the implemented example was easysearch:elasticsearch already added

I've additionally added easy:search package via meteor add . Still the same results (look below at updated packages file from .meteor folder).

# Meteor packages used by this project, one per line.
# Check this file (and the other files in this directory) into your repository.
#
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.

meteor-base@1.0.4             # Packages every Meteor app needs to have
mobile-experience@1.0.4       # Packages for a great mobile UX
mongo@1.1.14                   # The database Meteor supports right now
reactive-var@1.0.11            # Reactive variable for tracker
tracker@1.1.1                 # Meteor's client-side reactive programming library

standard-minifier-css@1.3.2   # CSS minifier run for production mode
standard-minifier-js@1.2.1    # JS minifier run for production mode
es5-shim@4.6.15                # ECMAScript 5 compatibility for older browsers.

angular2-compilers
practicalmeteor:mocha
xolvio:cleaner
hwillson:stub-collections
dispatch:mocha-phantomjs
shell-server@0.2.1
accounts-password
anti:fake
tmeasday:publish-counts
check
email
jalik:ufs
jalik:ufs-gridfs
mickaelfm:vermongo
easy:search
easysearch:elasticsearch

Does it maybe has to do something with the missing typings for the packages that I'm not able to import it?

Callmoon commented 6 years ago

I figured it out - anything was installed very well but the compiler, the editor (Atom with Typescript package) and the console gave me an error because of the missing typings.

Just added the following bad minimal type definitions to my typings.d.ts to connect successfully to the running elasticsearch server.

declare module 'meteor/easysearch:core' {
  import { Mongo } from "meteor/mongo";

  interface config {
    collection: any,
    fields: string[],
    engine: any
  }

  class Index {
    constructor(config: config);
    search(searchDefinition: string, options?: object): Mongo.Cursor<any>;
  }
}

declare module 'meteor/easysearch:elasticsearch' {
  interface params {
    body: any
  }

  class ElasticSearchEngine {
    constructor(obj: params);
  }
}