现在说明一下Meteor的工作目录是这样划分的,但是在说明之前 做个约定,以免后面造成混淆或错误。 
我们通过 meteor create API-002-Core创建meteor工程后,那么就会有一个API-002-Core的文件夹。从现在起我把这个文件夹的直接子目录,称之为应用根目录,或者简称为更目录,用符号/来表示。 
那么以上面的文件为例,他们的文件位置就是 /.meteor/,/API-002-Core.css
/
等。如果我在API-002-Core文件夹下创建了一个hello的文件夹。那么该文件用/hello/表示.约定就这些了。

在meteor工程目录中有几个目录是特殊的。它会通过文件夹的名称区别作用,默认创建应有后这些文件夹是不存在的,需要自己创建。具体如下:

/client/

该文件夹下的所有文件都会在浏览器访问应用时加载。换就话说即使客户端加载。它是自动加载的,无法进行控制。至于具体的加载顺序我会在另外一篇博文中讲述。

/server/

这个文件夹下的所有文件都会在meteor启动时在服务端加载。加载顺序另外一篇博文中进行描述。也就是V8虚拟机来加载,类似于一般的node.js文件,它是属于后台的。

 

/public/

这个文件里面的所有文件只能在浏览器端进行使用,通过文件夹的名称也能够看出来。区别于/client/,这里面的文件不会自动加载。里面主要存放的就是一些资源文件,如图片,css,js插件如jquery之类的等。这些文件需要手动的写引用,来使浏览器进行加载。如写在

 
 src=".."></script>
<style href="..."></style>

这里又有一点需要注意,在标签中引用文件时以“/public/“`为相对根目录引用就可以。举例说明。如果存在这样的css文件 
/public/a.css或者/public/css/b.css 
那么他们在引用上这样写即可,不需要带上public路径:

 href="a.css"></style>
<style href="css/b.css"></style>

/private/

这个文件夹是一个资源文件。用在服务端。一般存放一些配置文件。如json格式的配置文件等。区别于/server/ 这里面的文件不会自动加载。更不会执行。哪怕里面存放了一个js文件,js文件里面声明了全局变量。而不会执行。因为V8引擎根本就没有加载它。这个文件夹下的文件仅是看作二进制的文件而已。你可以读写它。

 

/packages/

这个文件夹下主要放的是第三方扩展模块。如router之类的扩展。这个里面的文件加载的位置(server或着client)主要看模块内部的定义。这里不做讨论。它配合/.meteor/packages文件使用。

 

以上这五种文件夹(严格来说是6个,还包括一个.meteor文件夹)是meteor工程里面比较特殊的几个。你可以根据实际情况来创建它们。他们的基本介绍就介绍到这里。

除这6个文件夹(包括其子目录)以外的其他所有文件及其他文件夹下的文件都将同时在client和server端进行加载。当然里面有个特例就是.html和.css两种文件,他们仅会放在Client端。

 

回到主题。

在一开始meteor那自动创建的xxx.js,xxx.css,xxx,html三个文件(这三个文件没有在上面提到的6种特殊文件夹里)。根据上面说 到的原则,那么xxx.csss,xxx.html 将加载在Client端,xxx.js将同时加载到Client和Server.


那么因为有这种同时加载js文件到Client和Server的规则。那么如同判断当前的运行时环境到底是Client还是Server呢?答案就是这小节的标题了。我们通过 
变量Meteor.isClient或者Meteor.isServer来判断了。

看到自动生成的js文件内容:


}; Template.hello.events({
'click input' : function () {
// template data, if any, is available in 'this'
if (typeof console !== 'undefined')
console.log("You pressed the button");
}
});
} if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
});
}

现在看两个if部分。那么现在应该很容易理解了。如果这js文件在Client端执行。那么if(Meteor.isServer)里面的语句就不会执行了,反之,如果js文件是在Server端进行加载实行,那么if(Meteor.isClient)里面的就不会执行了。 
所以最后总结:

Meteor.isServer,Meteor.isClient它的主要作用是判断当前的执行环境是Client还是Server。
通常只使用在那些 同时被Client和Server加载的js文件中。因为上文提到过,Meteor把js加载的位置通过文件夹(/server/,/client/)给区分开了,所以在/server/和/client/中我们已经明确的知道了这些文件运行时的环境(浏览器或是服务器),就用不上这两个布尔值了。

Meteor工作目录的划分的更多相关文章

  1. Go语言的GOPATH与工作目录详解

    这篇文章主要介绍了Go语言的GOPATH与工作目录详解,本文详细讲解了GOPATH设置.应用目录结构.编译应用等内容,需要的朋友可以参考下 GOPATH设置 go 命令依赖一个重要的环境变量:$GOP ...

  2. msysgit之git bash方便的复制粘贴,默认工作目录,窗口大小,提高速度等小窍门

    桌面图标点鼠标右键,选择属性,修改工作目录到自己的git目录: 打开快速编辑,这时候鼠标左键可以随意选取文本,enter键复制.鼠标右键是粘贴.另外,粘贴的快捷键是 inerst键 修改默认窗口大小 ...

  3. FTPClient使用中的问题--获取当前工作目录为null

    使用org.apache.commons.net.ftp.FTPClient 来做ftp的上传下载功能 FTPClient ftp = new FTPClient();ftp.connect(doc. ...

  4. svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录

    svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录 Windows下,svn服务器IP本来是内网一台服务器上 ...

  5. Erlang 从入门到精通(三) 改变工作目录

    对于初学者来书,经常会碰到下面的错误: no such file or directoryerror 提示找不到文件,这时候就需要将文件放到工作目录下,或者直接修改工作目录到文件所在位置. 右键ERl ...

  6. cmd运行的程序的工作目录

    如图所示,cmd通过输入自己编写的程序的实际路径,或者将程序放在环境变量中然后在cmd中执行,用start执行,该程序运行时的工作目录都是cmd当前所在目录:在cmd中输入该程序的快捷方式执行该程序, ...

  7. 批量修改vss工作目录

    vss作为源代码版本控制工具,可以针对不同的文件夹设置不同的本地工作目录,这样可以方便我们不同的个性化需求.但是往往实际情况是,我们设置了不同的工作目录,后来却发现导致引用混乱,每个人每次获取项目文件 ...

  8. GNU make简要介绍①指定变量、自动推导规则、清除工作目录过程文件

    Makefile简介 在执行make之前需要一个命名为Makefile的特殊文件来告诉make需要做些什么. 当使用 make 工具进行编译时,工程中以下几种文件在执行 make 时将会被编译 (重新 ...

  9. 4-pwd 打印当前工作目录

    pwd print name of current/working directory 打印当前工作目录 [语法]: pwd [选项] [参数] [功能介绍] pwd命令以绝对路径的方式显示用户当前工 ...

随机推荐

  1. WebApi异常处理解决方案

    一.使用异常筛选器捕获所有异常 首先在App_Start里面新建一个类WebApiExceptionFilterAttribute.cs,继承ExceptionFilterAttribute,重写On ...

  2. Android中图片的三级缓存策略

    在开发过程中,经常会碰到进行请求大量的网络图片的样例.假设处理的不好.非常easy造成oom.对于避免oom的方法,无非就是进行图片的压缩.及时的回收不用的图片.这些看似简单可是处理起来事实上涉及的知 ...

  3. zendstdio的智能提示功能

    在项目的include的那个地方邮寄,在addsource file  然后指向TP类库的文件夹,刷新项目即可有智能提示

  4. linux下调试使用的 一些shell命令

    查看文件日期:strings |grep Build gdb g++ gcc make systemctl gdb: bt s n b 1.firewalld的基本使用 启动: systemctl s ...

  5. 树莓派、 Arduino 、传统单片机开发板该如何选择?

    几十年前的电子爱好者,最喜欢的就是电烙铁.面包板和收音机:十几年前,出现了单片机,于是玩具就成了电烙铁.面包板和单片机:到了2015年,贴片技术的不断普及,让面包板不再那么有用武之地,经济的发展也让现 ...

  6. CronTrigger中cron表达式使用

    1.定时任务,当执行是具体时间的时候,不会立即执行,而是到指定时间执行. 2.实现Job接口时候,类中要有无参的public构造方法. 3.表达式中共用七个字段,按顺序是秒.分.时.日.月.周.年,默 ...

  7. makefile变量定义应用到c语言

    makefile是为组织程序工程的,其定义的宏怎样应用到c程序中呢? 我们知道Makefile中可定义变量或导出变量,make命令可定义变量:编译器(如gcc)可通过CFLAGS定义宏. 但如何才能使 ...

  8. K - Large Division 判断a是否是b的倍数。 a (-10^200 ≤ a ≤ 10^200) and b (|b| > 0, b fits into a 32 bit signed integer). 思路:取余;

    /** 题目:K - Large Division 链接:https://vjudge.net/contest/154246#problem/K 题意:判断a是否是b的倍数. a (-10^200 ≤ ...

  9. HTML— 弹出遮盖层

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  10. Java基础 - 强引用、弱引用、软引用、虚引用

    1.强引用(StrongReference) 强引用是使用最普遍的引用. 假设一个对象具有强引用.那垃圾回收器绝不会回收它.例如以下: [java] view plaincopyprint" ...