node是如何实现模块之间相互独立的

  • 普通html中通过<script>引入的js
//name.js

var name = ‘name‘

//getName.js 在其中去访问name.js中的name变量

console.log (name);     =>name

上边导致的要给问题就是:
当引入大量的js文件是模块之间  变量引用很难保证不重叠

  • 在nodejs中
所有的js文件在node中执行前,

都会被包装进define(require,exports,module,_filePath,_fileName){   //你的js代码    };

该函数会返回exports对象,代码中想能从模块外进行访问的变量必需是exports的属性。

之后nodejs会编译执行包装过的代码,执行时是通过node的vm模块中的runinThisContext(/包装过的代码/);

该函数作用类似于eval()函数,区别在于执行的代码被作用域被限制,代码只能访问代码里边的变量,从而达到

模块之间只能通过exports变量进行模块里变量的传递。

时间: 2024-08-25 13:26:13

node是如何实现模块之间相互独立的的相关文章

python 模块之间相互引用

模块层级关系: ----: |->AA.py |->BB.py |->CC.py AA.py from BB import BB class AA: def sub(self, x): bb = BB() bb.print_name() return x def print_name(self): print("AA") BB.py 引入方法一:在文件头部直接引入,算是全局引入吧. 引入方法二:在函数内引入,算是局部引入吧. ##引入方式一 from AA impor

多线程(三) 实现线程范围内模块之间共享数据及线程间数据独立(ThreadLocal)

ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.JDK 1.2的版本中就提供java.lang.ThreadLocal,使用这个工具类可以很简洁地编写出优美的多线程程序,ThreadLocal并不是一个Thread,而是Thread的局部变量. 1.下图和辅助代码解释ThreadLocal的作用和目的:用于实现线程内的数据共享,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据. 2.每个线程调用全局ThreadLocal

多线程(四) 实现线程范围内模块之间共享数据及线程间数据独立(Map集合)

多个线程访问共享对象和数据的方式 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 2.如果每个线程执行的代码不同,这时候需要用不同的Runnable对象,有如下两种方式来实现这些Runnable对象之间的数据共享:            将共享数据封装在另外一个对象中,然后将这个对象逐一传递给各个Runnable对象.每个线程对共享数据的操作方法也分配到那个对象身上去完成,这样容易实现针对该数据进行的各个

Node.js中的模块机制

本文为读书笔记. 一.CommonJS的模块规范 Node与浏览器以及 W3C组织.CommonJS组织.ECMAScript之间的关系 Node借鉴CommonJS的Modules规范实现了一套模块系统,所以先来看看CommonJS的模块规范. CommonJS对模块的定义十分简单,主要分为模块引用.模块定义和模块标识3个部分. 1. 模块引用 模块引用的示例代码如下: var math = require('math'); 在CommonJS规范中,存在require()方法,这个方法接受模

模块管理常规功能自定义系统的设计与实现(29--多个模块之间的关联[5])

多个模块之间的关联(5) 系统全部架构好了,下面来看看一个很远的关系,"省份","订单"之间的关联.在省份模块里显示该省的订单的个数以及金额和收款情况.跟前面的设计一样,给省份增加"附加字段". 然后把选入的字段加入到 grid 当中. 再来看看子模块市下面的菜单: 下面显示一下选择了订单菜单项的界面. 其他导航 以上为模块间关系的一个例子.上面有个缺点就是,我要看某个省份2013年度的订单汇总,在省份模块里就没有办法做到,这个问题放到以后去解决

深入解析父子线程(父子线程相互独立,子线程使用自己的栈空间,进程要等到所有线程终止运行之后才终止运行)

说起多线程,我们可以说起一大堆和它相关的有趣话题来,比如什么子孙线程关系,父子线程关系,线程同步异步之类的研究话题来,而我今天所说的,是关于父子线程的一些有趣现象. 首先提出一个问题,“在多线程的应用程序中,当父线程结束之后,子线程会不会退出呢?”,本文将围绕这个问题,深入分析windows中父子线程的生命周期及他们之间的关系. 我们知道,不管你使用的是何种编程语言,但当我们在windows下编程,且使用了平台相关性的库的时候,不管我们使用什么函数来创建线程,最终的结果是,我们的代码中都会调用C

Prism学习笔记-模块之间通信的几种方式

在开发大型复杂系统时,我们通常会按功能将系统分成很多模块,这样模块就可以独立的并行开发.测试.部署.修改.使用Prism框架设计表现层时,我们也会遵循这个原则,按功能相关性将界面划分为多个模块,每个模块又包含多个Region.这就需要解决模块之间.Region之间经常需要进行通信的问题,Prism提供了以下几种方式: 1.聚合事件(Event aggregation) 使用方式,先在一个公共模块中定义一个事件MyEvent ,传输数据为MyEntity. public class MyEvent

模块管理常规功能自定义系统的设计与实现(27--多个模块之间的关联[3])

多个模块之间的关联(3) 一."客户"模块对父模块字段的显示.和可以显示父模块的字段一样,也可以显示祖父模块的字段.设置如下: 上图中加入了一个省份名称的字段到"客户"的附加字段中,下面把他加入grid中. 下面展示一下各种导航模式. 下图为多导航值都有效的效果. 导出的excel 表的表式 以上及为多个模块相互关系的一些内容.下节开始快速的搭建我预设系统的另外半面,包括产品类别,产品, 业务员,销售订单,订单明细,收款明细等,搭建基本相同,过程就不详细讲了. 模块

Android应用模块之间通信模式

Android应用程序开发中通常需要多个模块进行通信(相互调用),如果不注意避免耦合,未来功能扩展以及调整会使得代码十分混乱,容易发生错误,并且维护困难.例如,Fragment直接通过(MainActivity)getActivity()的方式来使用其公共成员方法,Fragment和MainActivity之间紧耦合. 1 public class FragmentPage{ 2 ... 3 public void onClick(View v){ 4 ... 5 (MainActivity)