模块化介绍

什么是模块化

模块化,就是把一个大的文件拆分成若干小文件,而且还能把小文件通过特定的语法组合到一起的实现过程。

比如手机、电脑....等等几乎所有,都是模块化的设计,拿电脑来说,可以把电脑拆分成显示器、键盘、硬盘、内存等一个一个的小模块,当然也能够组装到一起。

优点

模块化的优势:

  • 更利于维护(比如电脑屏幕坏了,只换屏幕就可以了;比如想升级显卡,只换显卡就行了);

  • 更好的复用性(比如有一块移动硬盘或U盘,大家都能用)

Node中,规定每个JS文件都是一个小模块。一个项目由许许多多的小模块(JS文件)组合而成。

Node中模块化的优势:

  • 更利于维护(比如,项目需要对登录模块升级,则不会影响其他模块)

  • 更好的复用性(比如有一个公共的函数,封装起来。其他所有JS文件都能使用这个函数)

了解几种模块化规范

  • AMD

  • CMD

  • CommonJS(Node中的模块化,使用的是这种方案)

  • ES6

Node使用的是CommonJS规范。

模块的分类

  • 自定义模块

    • NodeJS中,创建的JS文件都是自定义模块。(也就是处处皆模块)

  • 内置模块(核心模块)

    • 安装Node之后,自带了很多内置模块。我们可以直接加载使用他们。

  • 第三方模块

    • 其他人编写的模块,发布到 npm 网站 上,我们可以下载使用。


自定义模块

我们创建的每个JS文件都是一个自定义模块,并且具有模块作用域,也就是在一个模块中创建的变量、常量、函数等等一切,都只能在当前模块中使用。

  • 共享(导出/暴露)内容给其他模块用,需要使用 module.exports 导出内容。

    • module 是Node中的一个全局对象,对象包含当前模块的详细信息。

    • module.exports 是模块的出口,通俗的说,就是导出内容用的,默认值是 {}

    • 比如,02-test.js 导出 age、name、fn 给其他模块用,可以 module.exports = {age, name, fn}

  • 其他模块,如果需要使用上述模块导出的内容,可以使用 require() 加载

    • let 结果 = require('模块路径')

    • 比如,let test = require('./02-test');

    • 加载自定义模块,必须加路径,即使是 ./ 也必须加。但是可以省略后缀。

示例:

02-test.js -- 导出内容

let age = 30;
let name = 'laotang';
let height = '175cm';
let weight = '75kg';
let square = x => x * x;// 导出age、name、fn给其他模块使用
module.exports = { age, name, square };

03-use.js -- 导入内容

let test = require('./02-test');console.log(test); // { age: 30, name: 'laotang', square: Function... }

一个模块导出什么,另一个模块加载后,就会得到什么。

就比如,我给你三个苹果,你只能得到三个苹果,不可能得到其他的。

内置模块

内置模块是Node.js 平台自带的一套基本的 API(功能模块)。也叫做核心模块。

下面介绍几个内置模块。

注意,加载内置模块,不能写路径,这是和加载自定义模块不一样的。

path模块

  • path 是 Node 本身提供的 API,专门用来处理路径。

  • path 路径 | Node.js API 文档

  • 使用

加载模块

// 使用核心模块之前,首先加载核心模块
let path = require('path');
// 或者
const path = require('path');

调用path模块中的方法,来处理相应的问题,下面列举path模块中的几个方法

方法 作用
path.basename(path[, ext]) 返回 path 的最后一部分(文件名)
path.dirname(path) 返回目录名
path.==extname==(path) 返回路径中文件的扩展名(包含.)
path.format(pathObject) 将一个对象格式化为一个路径字符串
path.==join==([...paths]) 拼接路径
path.parse(path) 把路径字符串解析成对象的格式
path.resolve([...paths]) 基于当前工作目录拼接路径
const path = require('path');// extname -- 获取文件后缀
console.log(path.extname('index.html')); // .html
console.log(path.extname('index.coffee.md')); // .md// join -- 智能拼接路径
// ------------------- 智能拼接路径 -----------------------------
// console.log(path.join('a', 'b', 'c')); // a/b/c// console.log(path.join('a', 'b', 'c', 'index.css')); // a/b/c/index.css// a里面有b,b里面有../c,言外之意,c和b同级。
// console.log(path.join('a', 'b', '../c', 'index.js')); // a/c/index.js// __dirname 永远表示当前js文件的绝对路径
console.log(path.join(__dirname, 'css', 'demo.css')); // /Users/tangfengpo/Study/123/Node01/code/css/demo.css

fs模块

  • fs,即 file system,文件系统,该模块可以实现对 文件、文件夹的操作

fs 文件系统 | Node.js API 文档

  • 使用

加载模块

// 引入模块,引入模块的时候,可以使用var、let,但是建议使用const,因为我们不希望它改变
const fs = require('fs');

调用fs模块的方法,下面列举fs模块中的常用方法

API 作用 备注
fs.access(path, callback) 判断路径是否存在
fs.appendFile(file, data, callback) 向文件中追加内容
fs.copyFile(src, callback) 复制文件
fs.mkdir(path, callback) 创建目录
fs.readDir(path, callback) 读取目录列表
fs.rename(oldPath, newPath, callback) 重命名文件/目录
fs.rmdir(path, callback) 删除目录 只能删除空目录
fs.stat(path, callback) 获取文件/目录信息
fs.unlink(path, callback) 删除文件
fs.watch(filename[, options][, listener]) 监视文件/目录
fs.watchFile(filename[, options], listener) 监视文件
..... 一大堆
// readFile -- 异步读取文件
fs.readFile('./test.json', (err, data) => {if (err) {console.log('读取文件出错');} else {console.log(data); // 读取到的二进制数据console.log(data.toString()); // 得到原始数据}
});fs.readFile('./test.json', 'utf-8', (err, data) => {if (err) {console.log('读取文件出错');} else {console.log(data); // 读取到的原始数据}
});
// writeFile -- 异步写入文件
fs.writeFile('./abc.html', 'hello world', (err) => {if (err) {console.log('写入文件失败');} else {console.log('文件写入成功');}
});

Node.js(0)相关推荐

  1. Node.js 0.8.21 稳定版发布

    Node.js 发布最新稳定版 0.8.21 ,改进内容包括: http: Do not free the wrong parser on socket close (isaacs) http: Ha ...

  2. Visual Studio的Node.js插件:NTVS 1.0正式发布

    NTVS是Node.js Tools for Visual Studio的缩写,它是Visual Studio 2012 和 Visual Studio 2013 为Node.js开发提供的一款免费. ...

  3. 使用express搭建第一个Web应用【Node.js初学】

    来源:http://jingyan.baidu.com/article/bad08e1ee501e009c8512106.html express是一个开源的node.js项目框架,初学者使用expr ...

  4. php和python性能-Node.js与PHP、Python的字符处理性能对比

    测试用例分为用函数和类来进行一个大字符串的字符逐一读取. 测试代码 Node.js 函数 var fs = require("fs"); var content = fs.read ...

  5. Node.js 博客实例(一)简单博客

    原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第一章.因为版本号等的原因,在原教程基础上稍加修改就可以实现. 环境: win7旗舰版64位 Node ...

  6. 阿里云ECS部署node.js及防火墙80端口开启

    第一篇竟然是node.js在阿里云ECS上的部署遇到的小问题记录. 很多时候我们排除故障都会掉进小坑,但别小看是小坑,有时候挺烦人挺难缠的,主要还是基础知识匮乏导致思路混乱造成的,在这里记录下,给自己 ...

  7. 使用 node.js 进行服务器端 JavaScript 编程

    node.js 是一个可以使用 JavaScript 开发服务器端应用的平台.它依托于 Google V8 JavaScript 引擎,并采用事件 I/O 的架构,可以用来创建高性能服务器.本文详细介 ...

  8. java数据存在ie中_[Java教程]解决在IE中获取数据的缓存问题,运行环境为node.js

    [Java教程]解决在IE中获取数据的缓存问题,运行环境为node.js 0 2015-11-30 20:00:06 IE下默认会开启缓存策略,不管是页面还是通过ajax请求的数据都会议一个url,u ...

  9. 将Visual Studio打造成为Node.js IDE

    原文地址:http://www.csdn.net/article/2013-11-22/2817594-Introducing-node.js-Tools-for-Visual-Studio 之前,C ...

最新文章

  1. 三、垃圾收集之判断对象是否存活
  2. phpstorm version 2016.2 License Server激活
  3. 搜索和搜索形式(SEARCHING and its forms)
  4. shell -nginx启动脚本
  5. SQL Server 2008 安装过程中遇到“性能计数器注册表”..
  6. 爸爸的素质决定孩子飞多高,爸爸们请反复看!!!
  7. 鱼骨图分析法实际案例_会用“鱼骨图”的项目经理无难题
  8. 作者:沈志宏(1977-),男,博士,中国科学院计算机网络信息中心高级工程师...
  9. 超几何分布_概率小题——分布列专题
  10. content:\2b 是什么意义
  11. 堆排序算法java左程云_堆排序算法以及JAVA实现
  12. openvino系列 16. OpenVINO 手写字体识别 OCR
  13. multi task训练torch_torch中创建multitask网络结构
  14. 程序员如何写简历之简介篇(一)
  15. 用本地播放器看直播,录制高清视频streamlink的使用
  16. java实训感想6000字_JAVA论文6000字:无线校园
  17. 我的Substance Designer 学习笔记02-PBR材质学习理解
  18. kafka启动报错:kafka.common.InconsistentClusterIdException: The Cluster ID KtS-r0FATSudTYqgf-7Ifw doesn‘t
  19. pap认证失败_认证方式pap chap协议解读
  20. HTML5的字体样式设置方法

热门文章

  1. 表严肃:前端语言基础HTML+CSS+JS,JQuery
  2. Go测试覆盖率 - Goc
  3. 1.4_10 Axure RP 9 for mac 高保真原型图 - 案例9 【按钮】单选按钮组
  4. Markdown给图片添加超链接,点击图片后,跳转新页面。放大缩小图片。
  5. 互链一周洞察 | 上周全球区块链:新项目披露14个,融资项目总额超8000万美元...
  6. 新建vue项目并引入element组件
  7. 电脑总蓝屏,可能是什么原因?怎么解决?
  8. python keyboard hook_键盘监控的实现Ⅰ——Keyboard Hook API函数
  9. CentOS8安装U盘制作
  10. 模拟黑洞图像_解密真正的黑洞模样!终于不再是模拟照片,这次是玩真的!