美文网首页
node.js模块加载机制

node.js模块加载机制

作者: 渚清与沙白 | 来源:发表于2023-10-08 11:22 被阅读0次

    常用NPM命令

    输入vim: 进入编辑模式,如 vim serve.js
    键入i : 进入新增内容模式
    键入Esc : 退出键入模式
    键入 :wq 保存并退出vim编辑

    1. 导入模块:const module = require('module-name');

    2. 导出模块:module.exports = {};

    3. 执行js: node server.js

    4. 查看版本: node -v

    5. node版本升级: sudo npm install npm -g

    6. 安装模块: npm install 模块名 如 npm install express

    7. 全局安装: npm install express -g

    8. 本地安装: npm install express

    9. 查看全局安装模块: npm list -g

    10. 查看本地安装模块: npm list

    11. 查看模块版本号: npm list grunt

    12. 卸载模块: npm uninstall express

    13. 查看node_modules目录下是否存在卸载的包: npm ls

    14. 更新模块: npm update express

    15. 搜索模块:npm search express

    16. 创建模块: npm init

    17. 发布模块:npm publish

    18. 创建package.json文件: npm init -y

    19. 安装指定包,记录到devDependencies节点中
      npm install 包名 —save-dev 可简写成: npm I 包名 -D

    20. 查看当前下包镜像源:npm config get registry

    21. 切换到淘宝镜像源:npm config set registry=https://registrt.npm.taobao.org/

    22. nrm切换下包镜像源
      安装nrm: npm I nrm -g
      查看可用镜像源: nrm ls
      切换到淘宝镜像源: nrm use taobao

    23. 安装全局包:npm I 包名 -g

    24. 卸载全局包: npm uninstall 包名 -g

    25. 发布包
      发布到npm官方服务器
      从淘宝镜像服务器切换到npm官方服务器
      终端登录npm
      发布包到npm,切换到包的根目录发布

    26. 登录npm: npm login

    27. 发布包:npm publish

    28. 删除已发布的包: npm unpublish 包名 —force

    29. 查看插件版本号:npm view webpack version

    30. npm init -y 快速创建包

    31. npm i -S uniq npm i -save uniq 生产依赖

    32. npm i -D uniq npm i -save-d uniq 开发依赖

    33. npm i | npm install 安装所有的包

    34. npm i <包名@版本号> 安装指定版本号的包

    35. nom r [remove] uniq 删除依赖

    36. npm run serve 执行脚本 serve是指令的别名

     "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
    
    1. nvm list available 显示所有可以下载的Node.js版本

    2. nvm install 12.16.1 安装指定Node.js版本

    3. nvm use 12.16.1 切换版本

    4. nvm list 显示已安装的Node.js版本

    5. nvm install latest 安装最新版本

    6. nvm uninstall 12.16.1 卸载指定版本

    Node.js的模块

    在 Node 应用程序中,执行异步操作的函数将回调函数作为最后一个参数, 回调函数接收错误对象作为第一个参数

    const fs = require("fs");
    
    // 异步读取
    fs.readFile('temp.txt',  (err, data) =>{
       if (err) {
           return console.error(err);
       }
       console.log("异步读取: " + data.toString());
    });
    
    // 同步读取
    var data = fs.readFileSync('temp.txt');
    console.log("同步读取: " + data.toString());
    
    // 异步写入
    fs.writeFile('temp.txt', '写入文件的内容',  (err)=> {
        if (err) {
            return console.error(err);
        }
        console.log("写入成功!");
     });
    

    一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展

    nodejs内置模块

    在 Node.js 中,有四种主要的模块类型:

    1. 内置模块:这些是 Node.js 自带的模块,无需通过 npm 安装就可以直接使用。例如,fspatheventsBufferhttpurlutil等都是内置模块。
    2. 自定义模块:用户可以创建自己的模块,并在其他地方引用。在 Node.js 中,一个文件就是一个模块。你可以在一个文件中编写 JavaScript 代码,然后通过require 关键字在其他文件中引用这个模块。
    3. 第三方模块:这些是通过 npm 安装的模块。npm 是 Node.js 的包管理器,允许用户分享和重用代码。你可以通过 npm install 命令来安装你需要的模块。
    4. Node.js 的核心模块:这些是 Node.js 的核心部分,实现了 Node.js 的基础功能。例如,bufferstreamprocess等都是核心模块。这些模块在 Node.js 的源代码中可以找到,但不可以直接修改。
    引入模块require

    require方法接受以下几种参数的传递:

    • http、fs、path等:引入原生模块
    • ./:./mod或../mod,相对路径的自定义文件模块。
    • /: /pathtomodule/mod,绝对路径的自定义文件模块。
    • mod:非原生模块的文件模块,第三方模块
    导出模块modules.exports
    1. modules.exports可以导出一个函数、对象等任意类型的数据
    2. exports仅仅是 module.exports 的一个引用,其实就是 module.exports = { }

    如果要对外暴露属性或方法,就用exports就行,要暴露对象(类似class,包含了很多属性和方法),就用module.exports。不建议同时使用 exports 和 module.exports。

    const date = require('./src/dateFormat');
    const escape = require('./src/htmlEscape');
    // 使用展开运算符,向外暴露date和escape的成员
    module.exports = {
        ...date,
        ...escape
    }
    
    全局变量
    • JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量
    • 浏览器 JavaScript 中,通常window 是全局对象, 而 Node.js 中的全局对象是 global所有全局变量(除了 global 本身以外)都是 global 对象的属性
    • global 最根本的作用是作为全局变量的宿主,当你定义一个全局变量时,这个变量同时也会成为全局对象的属性
    1. __filename 表示当前文件的绝对路径
    2. __dirname 表示当前文件所处的文件目录绝对路径
    3. setTimeout(cb,ms)
    4. clearTimeout(t)
    5. setInterval(cb,ms)
    6. console
    7. process

    模块的加载机制

    优先从缓存中加载

    模块在第一次加载后会被缓存。多次调用require()不会导致模块的代码被执行多次。所有模块加载均是优先加载缓存的,可以提高执行效率。

    内置模块加载机制

    内置模块是node.js官方提供的模块,加载的优先级最高

    自定义模块加载机制

    使用require加载自定义模块时,必须指定以./../开头的路径标识符,在加载自定义模块时,如果没有指定这样的标识符,node会把他当着内置模块或第三方模块进行加载。

    加载模块省略模块扩展名,node.js会按顺序别分尝试加载。

    1. 按照确切的文件名进行加载
    2. 补全.js扩展名进行加载
    3. 补全.json扩展名进行加载
    4. 补全.node扩展名进行加载
    5. 加载失败,终端报错
    第三方模块加载机制

    第三方模块是指在node_modules目录下安装的模块。传递给require()的标识符不是一个内置模块,也没有以./../开头的路径标识符,则node会从当前模块的父目录开始,尝试从node_modules目录中加载模块。如果在父目录中也找不到,则会继续往上一级目录中寻找,直到文件系统的根目录

    工具

    nodemon 工具: 避免频繁关闭、启动服务器 代码发生改变自动重启服务器
    nodemon app.js 启动服务器

    相关文章

      网友评论

          本文标题:node.js模块加载机制

          本文链接:https://www.haomeiwen.com/subject/bjhbbdtx.html