上一节中,搭建好了Meteor的开发环境,就可以新建一个项目跑起来。但是新建的项目,没有文件结构层次,显得比较杂乱。
由于Meteor比较灵活,它实际上是自动的帮我们加载了script
和link
标签。
.meteor
Meteor 存储它内部代码的地方,尝试更改里面的内容并不是什么好主意。但是其中的packages文件和release文件是你安装的所有智能代码包和你使用的Meteor版本信息,值得关注。/client
此目录下所有的文件都是在客户端使用,一般用于存放HTML, CSS, UI相关的JavaScript代码。/server
此目录下所有文件都用于服务器端,永远不会用于客户端。一般用来存放敏感的逻辑和数据文件。/lib
此目录存放的是公共模块,供客户端和服务器端使用。/public
此目录下文件也是为客户端服务,此目录用于存放比如图片素材,在HTML中直接相对于根目录就能获取到文件。/private
此目录下文件只为服务器端服务,并且通过Assets API
获取。/client/compatibility
此目录存放的是兼容性的JavaScript库文件, 这些文件依赖那些全局的变量,在这个目录下的文件会优先于其他客户端脚本文件执行。/packages
保存自己开发的代码包/test
此目录下文件永远不会执行,只是为了本地测试如果JavaScript文件没有放到规范的目录下,都会被加载到客户端和服务器端。Meteor提供了两个方法区分客户端和服务器端:
Meteor.isClient() // 在客户端执行
Meteor.isServer() // 在服务器端执行
CSS和HTML的文件如果没有按照规范放置的话,只会被加载到客户端,不会加载到服务器端。下面看一个官方的例子:
lib/ # common code like collections and utilities
lib/methods.js # Meteor.methods definitions
lib/constants.js # constants used in the rest of the code
client/compatibility # legacy libraries that expect to be global
client/lib/ # code for the client to be loaded first
client/lib/helpers.js # useful helpers for your client code
client/body.html # content that goes in the <body> of your HTML
client/head.html # content for <head> of your HTML: <meta> tags, etc
client/style.css # some CSS code
client/<feature>.html # HTML templates related to a certain feature
client/<feature>.js # JavaScript code related to a certain feature
server/lib/permissions.js # sensitive permissions code used by your server
server/publications.js # Meteor.publish definitions
public/favicon.ico # app icon
settings.json # configuration data to be passed to meteor --settings
mobile-config.js # define icons and metadata for Android/iOS
对文件加载顺序最好的执行方法就是尽量避免明确的加载顺序。使用Meteor.startup
或者在Packages
中明确加载顺序。
下面是一些关于文件加载顺序的规则:
main.
开头的文件main.
开头的文件其次加载lib
目录中的文件接着被加载官方也有一个例子:
nav.html
main.html
client/lib/methods.js
client/lib/styles.js
lib/feature/styles.js
lib/collections.js
client/feature-y.js
feature-x.js
client/main.js
比如我们的项目又两个类型的对象apples
和oranges
.组织方式通常可以这样:
可以将模块或者对象以顶级目录的形式进行管理:
apples/lib/ # code for apple-related features
apples/client/
apples/server/
oranges/lib/ # code for orange-related features
oranges/client/
oranges/server/
也可以分别在不同目录下进行管理:
lib/apples/ # common code for apples
lib/oranges/ # and oranges
client/apples/ # client code for apples
client/oranges/ # and oranges
server/apples/ # server code for apples
server/oranges/ # and oranges
最好的管理方式还是形成packages
,方便独立,模块和重用。
packages/apples/package.js # files, dependencies, exports for apple feature
packages/apples/<anything>.js # file loading is controlled by package.js
packages/oranges/package.js # files, dependencies, exports for orange feature
packages/oranges/<anything>.js # file loading is controlled by package.js
然后使用publish上传,通过meteor add <packages>
安装。