流星:导入目录-模块化导入所需的方法

用户名

我正在将流星应用程序迁移到流星1.3的导入功能。

但是我认为这并不是应该做的最好方法。是否只能加载/导入真正需要的方法?我的意思是,现在只有所有方法都通过导入methods.js来加载但是我想以模块化的方式做到这一点。因此,如果.fomNewElement在应用程序中使用了表单insertArticle则将导入方法,依此类推。不只是加载所有内容...

在下面,您可以看到我的文件夹结构/imports以及一些文件内容。我还有什么可以改善的结构本身吗?

如果导入将取决于用户角色,那也将非常好。这可能吗?

进口/api/article/client/article.js

import { Articles } from '../';
import { insertArticle, updateArticle } from '../methods.js';

Template.Articles.helpers({
    // some helpers
});
Template.Artilces.onCreated(function() {
    // some code
});
Template.Artilces.onRendered(function() {
    // some code
});
Template.Articles.events({
    'submit .formNewElement': function(event) {
        event.preventDefault();

        var title = event.target.title.value.trim();
        insertArticle.call({ 
            title: title
        });
    },
    'click .anything': function() {}
});

如您所见,我将所有帮助程序,事件和onCreated / onRendered代码放入了js文件。希望这是“正确的” ...如果不是很聪明,请给我一些提示。

进口/api/article/index.js

export const Articles = new Mongo.Collection('articles');

进口/api/article/methods.js

import { Articles } from './';

export const insertArticle = new ValidatedMethod({
        name: 'article.insert',
        validate: new SimpleSchema({
            title: { type: String }
    }).validator(),
    run( document ) {
        Articles.insert( document );
    }
});

export const updateArticle = new ValidatedMethod({
        name: 'article.update',
        validate: new SimpleSchema({
            _id:                { type: String },
            'update.title':     { type: String }
    }).validator(),
    run( { _id, update } ) {
        Articles.update( _id, { $set: update } );
    }
});

和其他文件:

导入/启动/客户端/ index.js

import '../../api/redactor-article/client';

导入/启动/服务器/ index.js

import '../../api/redactor-article/server/publications.js';
import '../../api/redactor-article/methods.js';

导入/api/article/client/index.js

import './article.html';
import './article.sass';
import './article.js';

文件结构

/imports
    /api
        /article
            /client
                article.html
                article.js
                article.sass
                index.js
            /server
                publications.js
        index.js
        methods.js

更新

也许这是构造这样的导入模块的更好方法:

imports/
    api/
        articles/
            publication.js
            methods.js
            collection.js
    ui/
        articles/
            article.html
            article.css
            article.js     // contains helpers, events and onCreated/onRendered

然后我必须在startup/client(->此模块的所有ui文件和所有api文件)和startup/server(->仅所有api文件)中导入文件...

正确的?

星历表

几点:

  • 您已经把所有东西都放下了imports/api该目录是为集合,方法,助手,“业务逻辑”和公共API设计的(例如,如果公开REST API,则可以在该目录中进行操作)。使用imports/ui你的模板(包括他们的风格和相关.js文件)。
  • 您无需在导入中的clientserver目录之间进行区分只需从相应的主要入口点(即client/main.jsserver/main.js导入所需的文件这一点比我在这里建议的要复杂一些,请参阅下面的“流星指南”中的“结构”链接。
  • index.js放置Articles收藏集似乎并不合逻辑/imports/api/articles/articles.js为此准备一个文件请参阅http://guide.meteor.com/structure.html,以获取有关放置物品的位置以及原因的良好概述。
  • 另外,为了遵循最佳做法,请为您的Articles集合使用默认导出http : //guide.meteor.com/code-style.html#collections

要回答有关导出多少文件(即哪些功能)的问题,对于要加载的所有内容,您无能为力。捆绑程序无论如何都需要读取整个JS文件(假设您导出了一个对象,然后在同一文件中对其进行了进一步的更改-这不是最佳实践,但可能)。但是,如果您不使用任何函数,请不要导入它!而且,如果无法管理,您总是可以将方法拆分为单独的文件。

关于只为某些用户角色导入位的问题:始终避免使用imports或其他类型的混淆来确保安全。在Meteor上实现安全性的理想方法是假定客户端上可以访问任何内容(几乎可以访问),并相应地对服务器端代码进行编码。这意味着,如果您具有管理区域,则假定任何人都可以访问它。您可以在servermethodspublicationsfor中进行检查,this.userId其中进行数据库查找以确保用户具有正确的特权。同样,该指南提供了有关此的更多信息:http : //guide.meteor.com/security.html

关于导入/导出的最后一点:它们背后的想法不是减少代码大小,而是提供一个实际使用的图形(并保留未使用的文件),以使热代码重新加载更快,从而更好开发经验。它们还使应用程序的代码更清晰易懂,因为您没有随处可见的随机魔术全局变量,并且有助于将逻辑上不同的代码段分开。

祝你好运:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

流星导入目录中的所有文件

来自分类Dev

在目录之间导入模块

来自分类Dev

流星:从文件导入markdown

来自分类Dev

流星导入错误

来自分类Dev

带有“当前目录”导入的导入模块

来自分类Dev

带有“当前目录”导入的导入模块

来自分类Dev

流星1.3导入npm模块问题

来自分类Dev

在Aurelia中导入非模块化脚本(linq.js)

来自分类Dev

Python从并行目录导入模块

来自分类Dev

从父目录导入XQuery模块

来自分类Dev

理解从目录导入模块的 React.js 导入语句

来自分类Dev

从父目录导入Python

来自分类Dev

目录中的Python导入

来自分类Dev

从父目录导入文件

来自分类Dev

oscarcommerce 目录导入

来自分类Dev

在 React 中导入目录

来自分类Dev

从深度嵌套的目录结构导入模块

来自分类Dev

无法从其他目录导入模块

来自分类Dev

从目录中以python导入用户定义的模块

来自分类Dev

将模块导入Jenkins主目录之外

来自分类Dev

Erlang从其他目录导入模块

来自分类Dev

找不到模块错误-从同级目录导入

来自分类Dev

无法从不同目录导入模块

来自分类Dev

Python模块导入问题子目录

来自分类Dev

导入任意子目录模块

来自分类Dev

从目录中以python导入用户定义的模块

来自分类Dev

打开模块“ XCTest”的导入文件:不是目录

来自分类Dev

无法从子目录导入模块

来自分类Dev

流星1.3:我可以从流星壳导入吗?