是否可以将文件名规则仅提供给客户端或服务器?

时间:2015-04-26 20:29:47

标签: meteor

Meteor有特殊目录:serverclient,用于仅向服务器提供文件或仅向客户端提供文件。

是否可以进行类似的行为,但不是使用客户端和服务器文件夹名称,而是使用以.client.js.server.js结尾的文件名?

例如,collections.client.js仅在客户端上可用,collections.server.js仅在服务器上可用?

UPD 也许有可能创建智能包,它将控制服务文件?

2 个答案:

答案 0 :(得分:1)

这是不可能的,但您可以做的是:

lib/collections/collection.js

声明集合和常见的客户端/服务器行为,例如Meteor.methods

client/collections/collection.js

声明有关集合的客户特定助手。

server/collections/collection.js

声明出版物和其他服务器端助手。

您也可以在lib/collections/collection.js中声明所有内容并使用Meteor.isClientMeteor.isServer块。 对于非常小的文件,这可能没问题,但对于较大的项目,它很快就会变得混乱。 我不确定Meteor构建工具是否足够聪明,可以从提供给客户端的捆绑中剥离Meteor.isServer

您也可以使用模块化方法并使用包,使用Package API,您可以精确控制文件应该执行的上下文。

Package.describe({
  name: "my-app-module",
  description: "Handles some feature in My App",
  version: "1.0.0"
});

Package.onUse(function(api){
  api.addFiles({
    "my-module/shared.js"
  },["client","server"]);
  //
  api.addFiles({
    "my-module/client.js"
  },"client");
  //
  api.addFiles({
    "my-module/server.js"
  },"server");
  //
  api.export("MyModule",["client","server"]);
});

答案 1 :(得分:0)

嗯,现在你不能这样做,但你可以把你的代码放在

if (Meteor.isServer) {
    // your server code
};

if (Meteor.isClient) {
    // your client code
};