2016-05-29 41 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'; 

如果它在子文件夹中。

这是否以某种方式回答你的问题?如果您需要更多帮助,请更具体和/或包含一些错误日志。