一、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. 全局成员概述

  1. dirname: 当前模块的目录名。 与 [`filename](http://nodejs.cn/s/RH6qCV) 的 [path.dirname()`](http://nodejs.cn/s/7t4KCq) 相同。
  2. __filename: 当前模块的文件名。 这是当前的模块文件的绝对路径(符号链接会被解析);
  3. 定时器相关的全局成员setTimeout(callback, delay)和clearTimeout(timeoutObject)、setInterval(callback, delay)和clearInterval(intervalObject);
  4. exports、module、require()三个全局成员是node.js的核心;
  5. process: process.argv 返回的是一个数组,数组的第一个项是node.js的程序路径,第二个是当前文件的路径
  6. 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(文件路径) 导入模块。例如:

  1. //导出模块。文件名:exportsFile.js
  2. let fac = function(num) {
  3. let result = 1;
  4. for (let i = 1; i < num; i ++) {
  5. result *= i;
  6. }
  7. return result;
  8. }
  9. let sum = function(num1, num2) {
  10. return num1 + num2;
  11. }
//使用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)
            }
        })

})