如何组织 Meteor 项目中的文件夹和文件?

Posted

技术标签:

【中文标题】如何组织 Meteor 项目中的文件夹和文件?【英文标题】:How to organize folders and files on Meteor project? 【发布时间】:2015-10-11 19:09:38 【问题描述】:

我在创建项目时试图理解 Meteor,但到目前为止我发现有些东西有点难以理解。

1- 当他们说我可以创建一个server 和一个client 文件夹时,我究竟应该在哪里这样做? .meteor 的兄弟姐妹?当应用程序启动时,一切都会在客户端或服务器的范围内,还是我必须做其他事情?如果我在 client 文件夹中创建一个 foo.js 和一个 foo 函数,我可以在 Meteor.isClient 中调用 foo() 并且它会工作吗?

2- 我需要创建一个上传文件夹,以便人们可以上传他们的东西(图像)。那么我应该在哪里做呢?另外,我怎样才能获得我的项目的绝对路径并在里面找到这个upload 文件夹?

在我的尝试中,我尝试了以下方法:

fs = Meteor.npmRequire('fs');
__ROOT_APP_PATH__ = fs.realpathSync('.');

但是__ROOT_APP_PATH__.meteor\local\build\programs\server。很隐蔽吧?!

3- 我看到有人直接在 MongoDB 上上传和保存文件。这是我们通常不会用关系数据库做的事情。我们将文件移动到 CDN 或我们自己的磁盘上的已知文件夹,并保存该文件的哈希值或名称,以便我们可以轻松找到它。 Meteor + MongoDB 不鼓励吗?为什么我要将文件本身保存在 Mongo 上而不是将其移动到文件夹中?

【问题讨论】:

【参考方案1】:

没有任何具体的方法,但流星建议这样做 http://docs.meteor.com/#/basic/filestructure

【讨论】:

我在根文件夹中创建了一个JS文件,声明了一个函数并在客户端启动时调用它。说它是未定义的【参考方案2】:

文件夹结构:

both/ (OR lib/)          -- common code for server and client
  |- collections/        -- declare collections (e.g Employer = new Meteor.Collection("employer");)
  |- router     /        -- router code(e.g Router.route(..))

client/                  -- client side code
  |- global/             -- all global variable for client
  |- helpers/            -- global helper for client (for all templates)
  |- plugins/            -- all the plugins code(if you use any)
  |- stylesheets/        -- css / less files
  |- templates/          -- all templates
        |- home.html     -- home template(html)
        |- home.js       -- home template(js)

public/                  -- images/icons/fonts (meteor looking at this file)

server/                  -- server code
  |- methods/            -- server methods/API (e.g Meteor.methods(...))
  |- publish/            -- publish code from server

这是我遵循的流星项目的基本文件夹结构。更多reference 或Documentation。如有任何问题,请随时在 cmets 中提问。

【讨论】:

我创建了一个名为lib的文件夹,在里面我放了一个JS文件并声明了foo。当我在Meteor.isClient 上调用它时,它说“foo 未定义” libboth 是相似的,它是最父目录..我的意思是.meteor..它是流星服务器和客户端的通用代码。我重要的是它在clientserver 之前执行。如果您遵循文件夹结构并且您在客户端目录中的代码被视为客户端代码。因此,无需再次使用Meteor.isClient 我的意思是我在/client.meteor 的兄弟姐妹foo.js 中创建了function foo(),并在我的主文件中调用foo(),在Meteor.isClient 中使用其余代码。它说“foo 未定义” 我假设您的 function foo() 是另一个文件中的全局函数,而您从其他文件中调用它。我有时也面临同样的问题。如果您这样做,请将其放在同一个文件中并检查一次...让我们知道。 Meteor 将所有文件包装在函数表达式中,在文件中使用var 或类似function name() 声明的任何内容都将仅限于该文件。您必须在全局范围内声明它,以便 Meteor 导出它,在那里查看我的答案:***.com/questions/31427322/file-load-order-in-meteor/…

以上是关于如何组织 Meteor 项目中的文件夹和文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Meteor 加载 Javascript 文件的顺序?

第二个meteor学习项目——(css和main.html)

如何在 Meteor 中使用多个 CSS 文件

main.* 中的 Meteor JS javascript 文件仍然无法正确加载。加载顺序的最佳实践?

在 Meteor 项目中使用 ES6 `import` 和 CSS/HTML 文件:错误还是功能?

防止 Meteor 包含文件?