2016-05-29 18 views
5

Đây có lẽ là một câu hỏi rất dễ cho thiên thạch 1.3 người hiểu biết.thiên thạch 1.3 cấu trúc ứng dụng: các nhiệm vụ chia nhỏ thành các đăng ký phương thức

Trong đề xuất meteor application structure documentation để chia API thành một vài tệp nhưng tôi không thấy bất kỳ ví dụ nào về cách kéo chúng trở lại với nhau. tôi bắt đầu với Todo React Tutorial: Collections và tôi đang cố gắng để chia /api/tasks.js vào tasks.js methods.js server/publications.js

Tôi không biết những gì thay đổi tôi cần phải thực hiện từ mã đó là trong tasks.js đúng nhập mã chuyển đến phương pháp .js và server/publications.js

Cảm ơn sự hỗ trợ của bạn!

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

Trả lời

3

Đây là một chủ đề khá rộng và khăng khăng, vì vậy tôi sẽ cố gắng để đưa ra một câu trả lời ngắn gọn có liên quan đến các vấn đề thảo luận trong Hướng dẫn Meteor.

Trước tiên, tôi sẽ làm theo hướng dẫn để có được mục đích của nó. Với tôi, có vẻ như nó không có ý định dạy bạn làm thế nào để xây dựng một ứng dụng phức tạp, mà là để có được hang React trong một dự án Meteor cơ bản.

Không có câu trả lời dứt khoát đối với câu hỏi về cấu trúc dự án, vì nó khá được đánh giá cao. Một số phân vùng theo chức năng, số khác theo tính năng; một số giống như làm tổ sâu và một số thích cấu trúc phẳng hơn.

Chủ đề chính là rõ ràng import cú pháp module khiến phụ thuộc của bạn rõ ràng và do đó ngăn ngừa sự cần thiết cho phỏng đoán hoặc tên tập vụng về mà mất ngữ nghĩa và làm cho việc tìm kiếm nguồn gốc của mỗi biểu tượng là một nhiệm vụ không tầm thường.

Hướng dẫn cấu trúc ứng dụng chưa hoàn thành hoặc chủ yếu bao gồm các nguyên tắc.

Giả sử một cái gì đó giống như cấu trúc đơn giản sau đây, phù hợp khá chặt chẽ với việc sử dụng hợp cụ thể:

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

Bất cứ điều gì trong thư mục imports không tự động nhập khẩu. Tất cả bắt đầu tại các điểm nhập server/main.jsclient/main.js.

Họ lần lượt nhập imports/<target>/index.js, đây là nơi ứng dụng được khởi động cho mỗi mục tiêu (máy khách/máy chủ).

Vì một số mã api là máy chủ cụ thể, bạn có thể muốn tạo một tệp server-api.js hoặc tương tự cũng nhập tài nguyên máy chủ.

Trong quá trình bootstrap, của máy chủ index.js sẽ

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

api-server.js sẽ:

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

trong khi client/index.js thể nhập khẩu api.js trực tiếp.

Phương pháp lấy mẫu và các ấn phẩm không xuất khẩu bất kỳ biểu tượng, vì vậy không cần phải nhập khẩu riêng cho họ, nhưng chỉ có tập tin mà chúng được định nghĩa trong

api.js sẽ:.

import './module1/methods'; 

nơi methods.jspublications.js sẽ nhập tệp collections.js, giả sử họ cần nó.

Một lần nữa, đây là một chủ đề rất rộng và có ý kiến ​​và có một số cách để cấu trúc dự án của bạn.

+0

Tôi hiểu sao băng 1.2 khá tốt và đã tạo ra một ứng dụng khá lớn với nó. Bây giờ tôi đang cố gắng tìm hiểu 4 thứ cấu trúc ứng dụng quy mô lớn cho 1,3, nhập/xuất, React và Mocha này. Cảm ơn bạn đã giải quyết sự phức tạp Tôi đã có "Các phương pháp và ấn bản tiêu chuẩn không xuất bất kỳ biểu tượng nào .. [nhập] tệp" #. Tôi đã thử đặt 'import './server/publications.js'; import './methods.js'; 'vào tệp tasks.js là không đủ để thực hiện việc truyền tasks.tests.js. Bây giờ hãy thử đề xuất của bạn. – Falieson

+0

Về cấu trúc ứng dụng quy mô lớn: Nghiên cứu tôi đã thực hiện kết luận giống như bạn đã nói - không có tiêu chuẩn, vì vậy tôi nghĩ tôi sẽ sử dụng Meteor's. – Falieson

+0

Trong hướng dẫn, tasks.tests.js chỉ nhập Nhiệm vụ từ './tasks.js'. Nhập {Tasks} từ './collections.js' và nhập './methods.js' mã trùng lặp mà tôi đặt trong cả hai task.js và tasks.tests.js? [tasks.js] của tôi (https://github.com/Falieson/LearningReact/blob/meteor_todos/MeteorTodos_React/imports/api/tasks/tasks.js) và [tasks.tests.js] (https: // github .com/Falieson/LearningReact/blob/meteor_todos/MeteorTodos_React/import/api/tasks/tasks.tests.js) – Falieson

0

Tôi không chắc mình hiểu vấn đề là gì. Tôi đoán nó là về các tuyên bố import.

Trong nhiệm vụ ban đầu của bạn tập tin bạn có

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

Bạn cần những để sử dụng chức năng/đối tượng từ Meteor, Mongo và kiểm tra gói.

Bạn cần xem mã nào cần. Trong tệp methods.js, bạn sử dụng Meteorcheck, nhưng bạn không sử dụng Mongo. Vì vậy, bạn muốn thêm

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

Tôi cũng thấy rằng bạn khai báo bộ sưu tập Mongo của mình trong tệp publication.js, thường không phù hợp. Một ấn bản chỉ nên chạy trên máy chủ, trong khi bộ sưu tập của bạn nên được khai báo cả trên máy khách và máy chủ.

Vì vậy, bạn nên di chuyển mã này

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

thường, nó sẽ đi trong file task.js.

Trong trường hợp này, trong task.js, như bạn đang tuyên bố một bộ sưu tập, bạn đang sử dụng các đối tượng Mongo và bạn cần phải

import { Mongo } from 'meteor/mongo'; 

Và trong ấn phẩm của bạn, cho thời điểm này bạn chỉ cần

import { Meteor } from 'meteor/meteor'; 

vẫn còn một vấn đề, khi bạn tuyên bố đối tượng nhiệm vụ sử dụng export, bạn cần phải nhập nó giống như cách hơn bạn nhập Meteor, Mongo và kiểm tra, nhưng khi gói của riêng bạn:

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

cho các tệp trong cùng một thư mục so với tệp tasks.js. Và

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

nếu nó nằm trong thư mục con.

Điều này có giải đáp được câu hỏi của bạn không? Nếu bạn cần thêm trợ giúp, vui lòng cụ thể hơn và/hoặc bao gồm một số nhật ký lỗi.

Các vấn đề liên quan