[英]How to structure Meteor app and load into Meteor shell
在学习Meteor时,我遇到了很多问题,它们构成了非常简单的代码。 请参阅注释,这些都是问题。
服务器/ main.js
import { Meteor } from 'meteor/meteor';
import { Post } from './schema'
// Why is this required to make Post available in Meteor.startup?
// Isn't there auto-loading?
Meteor.startup(() => {
console.log(Post)
// This works, but why isn't Post available to meteor shell?
});
服务器/schema.js
import { Post } from './models/post'
export { Post }
服务器/模型/ post.js
import { Class } from 'meteor/jagi:astronomy';
// Why can't this be imported elsewhere, like main.js?
const Posts = new Mongo.Collection('posts');
const Post = Class.create({
name: 'Post',
collection: Posts,
fields: {
title: { type: String },
userId: String,
publishedAt: Date
},
});
export { Post }
除了这些问题,如何将我的应用程序加载到流星外壳中? Post
是不确定的存在,即使在已定义Meteor.startup
。 我尝试将.load
与绝对路径一起使用,但这会中断我的应用程序的导入,该导入使用相对路径。
至于我对哪些错误感到困惑:
Meteor.startup()
使用import
,出现一个错误,指出关键字import
未定义。 我正在使用ecmascript
包。 Class
的同一文件中import { Class }
时,出现未知的关键字错误。 import { Post }
,则Post
是未定义的。 要访问流星外壳中的导出对象,请使用require
:
> require('server/schema.js').Posts.findOne();
要访问包导出的对象,请使用包名称:
> require('react').PropTypes;
您无法访问由另一个js文件导入的对象的原因是,每个文件在这里都有自己的作用域。 当Meteor构建您的应用程序时,它不仅像许多其他构建系统一样连接js文件,这确实是一件好事。
基本上,将为您编写的每个js文件创建一个Javascript对象。 您在js文件中导出的所有内容都将成为此对象中的字段,您可以使用require
访问。 import
只是同一件事的一个更好的版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.