2016-05-29 39 views
5

對於流星1.3知識淵博的人來說,這可能是一個非常容易的問題。meteor 1.3應用程序結構:將任務分解爲方法訂閱

meteor application structure documentation它建議將API分成幾個文件,但我沒有看到如何將它們拉回到一起的任何示例。 我開始與Todo React Tutorial: Collections,我想/api/tasks.js分成 tasks.js methods.js server/publications.js

我不知道什麼樣的變化,我需要從在tasks.js正確導入代碼移到方法的代碼,使.js和server/publications.js

感謝您的協助!

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

回答

3

這是一個相當廣泛的,自以爲是的話題,所以我會盡量給其涉及流星指南中所討論的事項的回答言簡意賅。

首先,我會按照教程來完成它的目的。對我來說,它似乎並不打算教你如何構建一個複雜的應用程序,而是要在基本的Meteor項目中掌握React。

對項目結構的問題沒有確切的答案,因爲它是相當自以爲是。一些按功能分區,另一些按功能分區;有些喜歡深層嵌套,有些喜歡更平坦的結構。

的主題是,模塊的明確import語法讓你的依賴明確,從而防止了猜測或尷尬的文件名,並失去語義,並且會發現每個符號一個不平凡的任務源的需求。

應用程序結構教程也不完整,主要包括指南。

假設像下面這樣簡單的結構,與用例相當緊密配合:

 
. 
├── 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 

凡是在imports目錄不會自動導入。這一切都始於server/main.jsclient/main.js入口點

他們反過來導入imports/<target>/index.js,這是應用程序爲每個目標(客戶端/服務器)引導的位置。

由於部分api代碼是特定於服務器的,因此您可能需要創建一個server-api.js文件或類似的文件,該文件也可以導入服務器資源。

在引導過程中,服務器的index.js

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

api-server.js將:

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

client/index.js可以直接導入api.js

的標準方法和出版物不出口任何符號,所以不需要單獨導入它們,而只是說他們在定義的文件

api.js將:

import './module1/methods'; 

其中methods.jspublications.js將導入collections.js文件,假設他們需要它。

再次,這是一個非常廣泛和有見地的話題,並且有幾種方法來組織您的項目。

+0

我很瞭解流星1.2,並且用它製作了一個相當大的應用程序。現在我正在嘗試爲1.3版本的大型應用程序結構學習4件事情,即導入/導出,React和Mocha。 感謝您解決我遇到的複雜問題「標準方法和出版物不會導出任何符號.. [導入]文件」。我試着把'import'./server/publications.js'; import'./methods.js';'到tasks.js文件不足以使tasks.tests.js通過。現在就試試你的建議。 – Falieson

+0

關於大規模應用程序結構:我所做的研究與您所說的完全相同 - 沒有標準,所以我想我會使用流星的。 – Falieson

+0

在教程中,tasks.tests.js只是從'./tasks.js'導入任務。是從'./collections.js'導入{Tasks}並導入'./methods.js'重複的代碼,我把它放在tasks.js和tasks.tests.js中? 我的[tasks.js](https://github.com/Falieson/LearningReact/blob/meteor_todos/MeteorTodos_React/imports/api/tasks/tasks.js)和[tasks.tests.js](https:// github .com/Falieson/LearningReact/blob/meteor_todos/MeteorTodos_React/imports/api/tasks/tasks.tests.js) – Falieson

0

我不確定我是否明白問題所在。我猜這是關於import聲明。

在你原來的工作文件,你有

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

你需要那些使用功能/從流星,蒙戈對象和檢查包。

你需要看看代碼需要什麼。在您的methods.js文件中,您使用Meteorcheck,但不使用Mongo。所以,你要添加

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

我也看到您在publication.js文件,這通常是不恰當的聲明您蒙戈集合。發佈應該只在服務器上運行,而您的集合應該在客戶端和服務器上聲明。

所以,你應該

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

通常移動這個代碼,它會去在task.js文件。

在這種情況下,在task.js,因爲你宣佈一個集合,您使用的蒙戈對象,你需要

import { Mongo } from 'meteor/mongo'; 

而在你的出版物,就目前你只需要

import { Meteor } from 'meteor/meteor'; 

仍然有問題,因爲你宣佈使用export任務對象,你需要比你導入流星,蒙戈導入它以同樣的方式和檢查,但作爲自己的包:

import { Tasks } from './tasks'; 

對於與tasks.js文件相同的文件夾中的文件。並且

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

如果它在子文件夾中。

這是否以某種方式回答你的問題?如果您需要更多幫助,請更具體和/或包含一些錯誤日誌。