在我学习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
使用绝对路径,但这会破坏我的应用程序的导入,这些导入使用相对路径。
至于我对哪些错误感到困惑:
import
内使用Meteor.startup()
时,我收到错误,指出关键字import
未定义。我正在使用ecmascript
包。import { Class }
的同一个文件中Class
,我会收到一个未知的关键字错误。 import { Post }
,则Post
未定义。 答案 0 :(得分:2)
要访问Meteor shell中的导出对象,请使用require
:
> require('server/schema.js').Posts.findOne();
要访问由包导出的对象,请使用包名称:
> require('react').PropTypes;
您无法访问由另一个js文件导入的对象的原因是每个文件都有自己的范围。当Meteor构建你的应用程序时,它并不像许多其他构建系统那样连接js文件,而且真的是一件好事。
基本上,为您编写的每个js文件创建一个Javascript对象。您在js文件中导出的任何内容都将成为此对象中的一个字段,您可以使用require
进行访问。 import
只是同一件事的更好的版本。