2016-05-29 2 views
5

Dies ist wahrscheinlich eine sehr einfache Frage für Meteor 1.3 kenntnisreiche Menschen.Meteor 1,3 App-Struktur: Spltting Aufgaben in Methoden Subskriptionen

In der meteor application structure documentation empfiehlt es sich, eine API in ein paar Dateien zu teilen, aber ich habe keine Beispiele gesehen, wie man sie wieder zusammenzieht. Ich fange mit Todo React Tutorial: Collections und ich versuche /api/tasks.js in tasks.js methods.js server/publications.js

Ich weiß nicht, zu spalten, welche Änderungen muss ich aus dem Code machen, die in tasks.js war richtig der Code zu importieren, um Methoden bewegt .js und server/publications.js

Vielen Dank für Ihre Unterstützung!

Code: http://www.github.com/Falieson/LearningReact/blob/meteor_todos/MeteorTodos_React/imports/api/tasks/tasks.js

Antwort

3

Dies ist ein ziemlich breites und meinungs Thema, also werde ich versuchen, eine präzise Antwort zu geben, die auf Angelegenheiten bezieht sich im Meteor-Führer diskutiert.

Zuerst würde ich mit dem Tutorial folgen, um seinen Zweck zu bekommen. Für mich scheint es, dass es nicht beabsichtigt, Ihnen beizubringen, wie man eine komplexe App erstellt, sondern React in einem grundlegenden Meteor-Projekt in den Griff bekommt.

Es gibt keine definitive Antwort auf die Frage der Projektstruktur, wie es ziemlich eigensinnig ist. Einige Partition nach Funktion, andere nach Funktion; manche mögen tiefe Verschachtelung und manche bevorzugen eine flachere Struktur.

Das Hauptthema ist, dass die explizite import Syntax Module Ihre Abhängigkeiten explizit macht und daher die Notwendigkeit für Vermutungen oder umständlich Dateinamen verhindern, die Semantik und macht die Suche, die Quelle jedes Symbol eine nicht-triviale Aufgabe verliert.

Das App-Struktur-Tutorial ist ebenfalls nicht vollständig und enthält hauptsächlich Richtlinien.

sind so etwas wie die folgende einfache Struktur annehmen lassen, die ziemlich eng mit der Use-Case paßt:

 
. 
├── client 
│   └── main.js 
├── imports 
│   ├── api 
│   │   ├── api.js 
│   │   ├── api-server.js 
│   │   └── module1 
│   │    ├── collections.js 
│   │    ├── methods.js 
│   │    └── server 
│   │     └── publications.js 
│   ├── client 
│   │   └── index.js 
│   └── server 
│    └── index.js 
└── server 
    └── main.js 

Alles, was in dem imports Verzeichnis nicht automatisch importiert. Alles beginnt in den server/main.js und client/main.jsEinstiegspunkten.

Sie importieren wiederum die imports/<target>/index.js, wo die App für jedes Ziel (Client/Server) bootstrapped wird.

Da einige der api-Code Server-spezifisch ist, möchten Sie wahrscheinlich eine server-api.js-Datei oder dergleichen erstellen, die auch die Serverressourcen importiert.

Während des Bootstrap-Prozess, der Server des index.js wird

import '../api/api-server'; 

api-server.js wird:

import './api'; 
import './module1/server/publications'; 

während der client/index.js konnte api.js direkt importieren.

Standardmethoden und Publikationen exportieren kein Symbol, so dass keine Notwendigkeit, sie einzeln zu importieren, aber nur die Datei, die sie in definierten

api.js wird.

import './module1/methods'; 

wo methods.js und publications.js wird die Datei collections.js importieren, vorausgesetzt, sie benötigen sie.

Auch dies ist ein sehr breites und meinungsorientiertes Thema und es gibt mehrere Möglichkeiten, um Ihr Projekt zu strukturieren.

+0

Ich verstehe Meteor 1.2 ziemlich gut und habe eine ziemlich große App damit gemacht. Jetzt versuche ich 4 Dinge große App-Struktur für 1,3, diesen Import/Export, React und Mocha zu lernen. Vielen Dank für die Behandlung der Komplikation, die ich hatte "Standardmethoden und Publikationen exportieren kein Symbol .. [Import] die Datei". Ich habe versucht, 'import './server/publications.js' zu setzen; Import './methods.js; 'in die Datei tasks.js reichte nicht aus, um tasks.tests.js bestehen zu lassen. Ich werde jetzt deine Vorschläge ausprobieren. – Falieson

+0

In Bezug auf große App-Struktur: Die Forschung, die ich getan habe, schloss das gleiche wie Sie sagten - es gibt keinen Standard, also dachte ich, ich würde Meteor verwenden. – Falieson

+0

Im Lernprogramm importiert tasks.tests.js nur Aufgaben von './tasks.js'. Importieren Sie {Tasks} aus './collections.js' und importieren Sie './methods.js' doppelten Code, den ich in tasks.js und tasks.tests.js eingegeben habe? Meine [Aufgaben.js] (https://github.com/Falieson/LearningReact/blob/meteor_todos/MeteorTodos_React/imports/api/tasks/tasks.js) und [tasks.tests.js] (https: // github .com/Falieson/LearningReact/blob/meteor_todos/MeteorTodos_React/imports/api/tasks/tasks.tests.js) – Falieson

0

Ich bin mir nicht sicher, ich verstehe, was das Problem ist. Ich schätze, es geht um die import Aussagen.

In Ihrer ursprünglichen Aufgaben Datei, die Sie

import { Meteor } from 'meteor/meteor'; 
import { Mongo } from 'meteor/mongo'; 
import { check } from 'meteor/check'; 

Sie haben diejenigen, müssen Funktionen nutzen/Objekte aus dem Meteor, Mongo und Pakete überprüfen.

Sie müssen sehen, was der Code benötigt. In Ihrer methods.js Datei verwenden Sie Meteor und check, aber Sie verwenden Mongo nicht. So möchten Sie hinzufügen

import { Meteor } from 'meteor/meteor'; 
import { check } from 'meteor/check'; 

Ich sehe auch, dass Sie Ihre Mongo Sammlung in Ihrer publication.js Datei deklarieren, die in der Regel nicht geeignet ist. Eine Veröffentlichung sollte nur auf dem Server ausgeführt werden, während Ihre Sammlung sowohl auf dem Client als auch auf dem Server deklariert werden sollte.

So sollten Sie diesen Code bewegen

export const Tasks = new Mongo.Collection('tasks'); 

typischerweise, wäre es in der task.js Datei gehen.

In diesem Fall in der task.js, wie Sie eine Sammlung sind zu erklären, sind Sie das Mongo-Objekt, und Sie müssen

import { Mongo } from 'meteor/mongo'; 

Und in Ihrer Publikation, für den Moment brauchen Sie nur

import { Meteor } from 'meteor/meteor'; 

es ist immer noch ein Problem dar, da Sie die Aufgabe Objekt mit export erklärt, müssen Sie es auf die gleiche Weise importieren, als Sie importieren Meteor, Mongo und überprüfen, aber wie Ihr eigenes Paket:

import { Tasks } from './tasks'; 

für Dateien in demselben Ordner als die Datei tasks.js. Und

import { Tasks } from '../tasks'; 

wenn es in einem Unterordner ist.

Beantwortet das irgendwie Ihre Frage? Wenn Sie weitere Hilfe benötigen, seien Sie bitte spezifischer und/oder fügen Sie ein Fehlerprotokoll hinzu.

Verwandte Themen