zoukankan      html  css  js  c++  java
  • Meteor工作目录的划分

    现在说明一下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
    通常只使用在那些 同时被ClientServer加载的js文件中。因为上文提到过,Meteorjs加载的位置通过文件夹(/server/,/client/)给区分开了,所以在/server/和/client/中我们已经明确的知道了这些文件运行时的环境(浏览器或是服务器),就用不上这两个布尔值了。
  • 相关阅读:
    关于给Tomcat设置maxPostSize的问题
    完美激活PyCharm教程
    Tomcat +Nginx+Redis实现session共享
    python 上传多文件
    吸引注意力的动画
    Create React App 安装less 报错
    2020软件工程作业01
    yum用法
    rpm包的管理
    共享依赖库的误移或误删解决办法
  • 原文地址:https://www.cnblogs.com/welhzh/p/6513881.html
Copyright © 2011-2022 走看看