模块化

简介: 模块化

1.模块引用


• 在规范中,定义了require()方法,这个方法接手模块标识,以此将一个模块引入到当前运行环境中。

• 模块引用的示例代码:
– var math = require(‘math’);


2.模块定义


• 在运行环境中,提供了exports对象用于导出当前模块的方法或者变量,并且它是唯一的导出的出口。

• 在模块中还存在一个module对象,它代表模块自身,而exports是module的属性。

• 在Node中一个文件就是一个模块。

exports.x = 10;
exports.y = 11;
exports.fn = function() {
}

3.模块标识


• 模块标识其实就是模块的名字,也就是传递给require()方法的参数,它必须是符合驼峰命名法的字符串,或者是以.、…开头的相对路径、或者绝对路径。

• 模块的定义十分简单,接口也十分简洁。每个模块具有独立的空间,它们互不干扰,在引用时也显得干净利落。

module.exports = {}


4.模块化总结


模块化
  - 在Node中,一个js文件就是一个模块
  - 在Node中,每一个js文件中的js代码都是独立运行在一个函数中
    而不是全局作用域,所以一个模块的中的变量和函数在其他模块中无法访问
03module.js
//引入其他的模块
/*
在node中,通过require()函数来引入外部的模块
  require()可以传递一个文件的路径作为参数,node将会自动根据该路径来引入外部模块
  这里路径,如果使用相对路径,必须以.或..开头
使用require()引入模块以后,该函数会返回一个对象,这个对象代表的是引入的模块
我们使用require()引入外部模块时,使用的就是模块标识,我们可以通过模块标识来找到指定的模块
- 模块分成两大类
  核心模块
    - 由node引擎提供的模块
    - 核心模块的标识就是,模块的名字
    - 示例:var fs = require("fs");
  文件模块
    - 由用户自己创建的模块
    - 文件模块的标识就是文件的路径(绝对路径,相对路径)
      相对路径使用.或..开头
 */
//var md = require("./02.module");
var math = require("./math");
var fs = require("fs");
//console.log(md);
console.log(math.add(123,456));
//console.log(fs);
02module.js
/*
我们可以通过 exports 来向外部暴露变量和方法
只需要将需要暴露给外部的变量或方法设置为exports的属性即可
*/
//向外部暴露属性或方法
exports.x = "我是02.module.js中的x";
exports.y = "我是y";
exports.fn = function () {
};
04module.js
/*
在node中有一个全局对象 global,它的作用和网页中window类似
  在全局中创建的变量都会作为global的属性保存
  在全局中创建的函数都会作为global的方法保存
当node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码
    function (exports, require, module, __filename, __dirname) {
在代码的最底部,添加如下代码
    }
实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递进了5个实参
   exports
    - 该对象用来将变量或函数暴露到外部
   require
    - 函数,用来引入外部的模块
   module
    - module代表的是当前模块本身
    - exports就是module的属性
    - 既可以使用 exports 导出,也可以使用module.exports导出
   __filename
    C:\Users\lilichao\WebstormProjects\class0705\01.node\04.module.js
    - 当前模块的完整路径
     __dirname
    C:\Users\lilichao\WebstormProjects\class0705\01.node
    - 当前模块所在文件夹的完整路径
*/
//console.log(global.a);
/*
  arguments.callee
    - 这个属性保存的是当前执行的函数对象
*/
//console.log(arguments.callee + "");
//console.log(arguments.length);
//console.log(exports);
//console.log(module.exports == exports);
console.log(__dirname);
05module.js
/*
exports 和 module.exports
  - 通过exports只能使用.的方式来向外暴露内部变量
    exports.xxx = xxx
  - 而module.exports既可以通过.的形式,也可以直接赋值
    module.exports.xxx = xxxx
    module.exports = {}
 */

5.包结构


• 包实际上就是一个压缩文件,解压以后还原为目录。符合规范的目录,应该包含如下文件:

– package.json 描述文件
– bin 可执行二进制文件
– lib js代码
– doc 文档
– test 单元测试



6.在JSON文件不能写注释

相关文章
|
前端开发 API
minio预签名上传前端axios注意事项
minio预签名上传前端axios注意事项
331 0
|
移动开发 JavaScript 前端开发
Html获取Url参数
Html获取Url参数
153 0
|
Python
一日一技:在Python中为别人的函数设定默认参数
一日一技:在Python中为别人的函数设定默认参数
134 0
|
消息中间件 Java
Java操作RabbitMQ单一生产-消费者模式
Java操作RabbitMQ单一生产-消费者模式
|
Linux 数据安全/隐私保护 C++
centos 6.3系统sersync+rsync文件同步安装配置
最近涉及到文件同步以及远程备份的技术比较多,也系统的整理了一下。目前我的服务器上采用的是inotify+rsync实时同步的,文件数量少或者需要同步的服务器数量少的时候还可以,但是对于大文件同步,或者需要同步的文件数较多及多服务器同步的时候就难以胜任了。
1113 0
|
8天前
|
人工智能 运维 安全
|
6天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
631 22