javascript:重构全局对象以要求()模块

javascript:重构全局对象以要求()模块,javascript,node.js,dependency-injection,browserify,Javascript,Node.js,Dependency Injection,Browserify,我想使我们的JavaScript架构现代化——更重要的是,开始为我们的JavaScript代码编写单元测试 我一直在把来自不同问题/博客的信息拼凑在一起,并制定了一个初步计划。然而,我真的不确定我是否在正确的轨道上 该计划: 将组件重构为导出的模块,而不是全局对象 创建一个需要()所有文件/组件的入口点(index.js?) 用户浏览创建与浏览器兼容的静态文件(返回全局) 使用node、mocha和chai运行npm测试以执行引用可导出组件的测试 重构: 全局对象: // myProject.j

我想使我们的JavaScript架构现代化——更重要的是,开始为我们的JavaScript代码编写单元测试

我一直在把来自不同问题/博客的信息拼凑在一起,并制定了一个初步计划。然而,我真的不确定我是否在正确的轨道上

该计划:
  • 将组件重构为导出的模块,而不是全局对象
  • 创建一个需要()所有文件/组件的入口点(index.js?)
  • 用户浏览创建与浏览器兼容的静态文件(返回全局)
  • 使用node、mocha和chai运行npm测试以执行引用可导出组件的测试
  • 重构: 全局对象:

    // myProject.js
    // --------------------
    var MyProject = {};
    
    // component1.js
    // --------------------
    myProject.component1 = {};
    
    要要求()模块,请执行以下操作:

    问题是: 若一个项目使用全局对象来命名组件的名称空间,那个么我如何重构这些JavaScript文件来导出将在节点中工作的模块?上述计划是否遵循JavaScript依赖项/模块的现代标准


    我主要担心的是,我的index.js(或main entry)文件将成为维护的噩梦(按require()添加每个新文件)。

    您的index.js应该只需要核心入口点(如顶级组件)

    间接需要其他文件

    因此,您不应该有任何巨大的所有文件列表;每个文件应该只需要它直接使用的东西


    Browserify将组装所有require()d文件的可传递闭包。

    您的
    index.js
    应该只需要核心入口点(如顶级组件)。其他文件将需要间接。这是非常有意义的,谢谢你指出这一点。由于不熟悉使用require(),我甚至没有意识到我可以依靠这些组件来完成所有工作。谢谢X1000谢谢你发布这个答案-它肯定解决了我对该方法的主要担忧。在你看来,我能不能也认为这意味着我计划的其余部分在其他项目上是可靠的?我愿意接受任何建议/批评-越早越好:)
    myProject.js
    不应该导出任何内容。如果我理解正确,myProject.js可以有效地替换为index.js,因为它以前的目的只是将所有其他对象分组到一个命名空间下。是吗?@维拉蒂:对。在使用模块时,根本没有名称空间的概念。感谢您的确认。我的理解有了很大的提高:)我尽量不让你回答我的问题感到头晕——我在Twitter上关注你有一段时间了,我是你的粉丝!有你的帮助,我今天过得很愉快!
    // myProject.js
    // --------------------
    var component1 = require('./component1');
    modules.export = { component1 };
    
    // component1.js
    // --------------------
    var component1 = {};
    modules.exports = component1;