对于流星1.3知识渊博的人来说,这可能是一个非常简单的问题。
在meteor application structure documentation建议将API拆分为几个文件,但我没有看到任何将它们重新组合在一起的示例。
我从Todo React Tutorial: Collections开始,我试图将/api/tasks.js
分成两部分
tasks.js methods.js server/publications.js
我不知道我需要从tasks.js中的代码做出哪些更改才能正确导入移动到methods.js和server / publications.js的代码
感谢您的协助!
答案 0 :(得分: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.js
和client/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.js
和publications.js
将导入collections.js
文件,假设他们需要它。
同样,这是一个非常广泛和自以为是的主题,有几种方法可以构建您的项目。
答案 1 :(得分:0)
我不确定我明白问题所在。我猜它是关于import
陈述。
在您的原始任务文件中
import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
import { check } from 'meteor/check';
您需要使用Meteor,Mongo中的函数/对象并检查包。
您需要查看代码所需的内容。在methods.js
文件中,您使用的是Meteor
和check
,但您没有使用Mongo
。所以你要添加
import { Meteor } from 'meteor/meteor';
import { check } from 'meteor/check';
我还看到你在publication.js
文件中声明了你的Mongo集合,这通常是不合适的。发布应仅在服务器上运行,而您的集合应在客户端和服务器上声明。
所以你应该移动这段代码
export const Tasks = new Mongo.Collection('tasks');
通常会进入task.js
文件。
在这种情况下,在task.js
中,当您宣布收藏时,您正在使用Mongo对象,而您需要
import { Mongo } from 'meteor/mongo';
在您的出版物中,目前您只需要
import { Meteor } from 'meteor/meteor';
还有问题,因为你使用export
声明了任务对象,你需要导入它的方式与导入Meteor,Mongo和check相同,但作为你自己的包:
import { Tasks } from './tasks';
与tasks.js
文件位于同一文件夹中的文件。和
import { Tasks } from '../tasks';
如果它在子文件夹中。
这会以某种方式回答您的问题吗?如果您需要更多帮助,请更具体和/或包含一些错误日志。