一、node.js 基础
1.1 REPL
cmd执行node出现的终端叫REPL: read-eval-print-loop 读取代码-执行代码-打印结果-循环这个过程。
- 在REPL中下划线“_”表示最后一次执行结果;
- .exit 可以退出REPL环境;
- .load 文件路径 可以将一个js文件加载到REPL环境中;
- 注: 执行js文件只需要在cmd中使用node 文件路径即可执行js文件。
二 node.js模块化
2.1. 全局成员概述
- dirname: 当前模块的目录名。 与 [`filename
](http://nodejs.cn/s/RH6qCV) 的 [
path.dirname()`](http://nodejs.cn/s/7t4KCq) 相同。 - __filename: 当前模块的文件名。 这是当前的模块文件的绝对路径(符号链接会被解析);
- 定时器相关的全局成员setTimeout(callback, delay)和clearTimeout(timeoutObject)、setInterval(callback, delay)和clearInterval(intervalObject);
- exports、module、require()三个全局成员是node.js的核心;
- process: process.argv 返回的是一个数组,数组的第一个项是node.js的程序路径,第二个是当前文件的路径
- TextEncoder、TextDecoder 文字编解码(不了解)
2.2 模块成员导出详解
2.2.1 模块化开发的诞生
传统非模块化开发的缺点:命名冲突,不同开发人员可能使用相同名字,导致部分方法或变量被覆盖;文件之间的依赖关系管理复杂。模块化标准
前端模块化规范:AMD - requirejs、CMD - seajs
后端模块化规范:CommonJS - Node.js
2.2.2 模块化相关的规则
1. 如何定义模块: 一个js文件就是一个模块,模块内的成员相互独立;
2. 模块成员的导出与引入
2.2.3 node.js中的模块的导出与引入
node.js中使用exports导出模块,使用require(文件路径) 导入模块。例如:
//导出模块。文件名:exportsFile.js
let fac = function(num) {
let result = 1;
for (let i = 1; i < num; i ++) {
result *= i;
}
return result;
}
let sum = function(num1, num2) {
return num1 + num2;
}
//使用exports将模块导出
exports.fac = fac;
exports.sum = sum;
//导入模块。文件名requireFile.js
let exportsFile = require("./exportsFile.js");
let result = exportsFile.fac(5);
console.log(result);
console.log(exportsFile);
//执行结果
24
{ fac: [Function: fac], sum: [Function: sum] }
注:模块的导出也可以使用module.exports = 需要导出的对象,在引用的文件中使用 let obj = require(“文件路径”); 此时的obj就是需要导出的对象
2.3 初识文件操作
通过node.js的核心模块实现创建项目目录
//导入node.js的文件模块和路径模块
let path = require("path");
let fs = require("fs");
// 定义根目录
let root = "E:\\webproject";
let fileContent =
`
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div>这是首页</div>
</body>
</html>
`;
let initDatas = {
projectName: "myTest",
data: [{
name: "js",
type: "dir"
},
{
name: "css",
type: "dir"
},
{
name: "image",
type: "dir"
},
{
name: "index.html",
type: "file"
}
]
}
//创建文件夹
fs.mkdir(path.join(root, initDatas.projectName), err => {
if (err) {
console.log(err);
return;
}
initDatas.data.forEach(
function(item) {
if (item.type === "dir") {
fs.mkdirSync(path.join(root, initDatas.projectName, item.name));
} else if (item.type === "file") {
fs.writeFileSync(path.join(root, initDatas.projectName, item.name), fileContent)
}
})
})