NodeJs 第三章(模块化与包管理器)

282 阅读3分钟

模块化概述

模块化的概念

在软件开发中,模块化是一种将程序分割成独立功能模块的设计理念。每个模块都有自己特定的功能和职责,模块之间通过特定的接口进行交互。模块化的好处包括:

  • 提高代码的可维护性:每个模块的功能相对独立,修改一个模块不会对其他模块产生影响,降低了代码的耦合度。
  • 增强代码的复用性:可以在不同的项目中重复使用已经开发好的模块,减少了代码的重复编写。
  • 便于团队协作:不同的开发人员可以负责不同的模块开发,提高开发效率。

Node.js 中的模块化

Node.js 从设计之初就支持模块化开发,它采用了 CommonJS 规范。在 CommonJS 规范中,每个文件就是一个模块,拥有自己独立的作用域、变量和函数。

CommonJS 模块化规范

模块的导出(exports 和 module.exports)

在 Node.js 中,要将模块内部的变量、函数或对象暴露给其他模块使用,需要使用 exports 或 module.exports

exports

exports 是 module.exports 的一个引用,通过 exports 可以将模块内部的成员导出。

// math.js
exports.add = function(a, b) {
    return a + b;
};

exports.subtract = function(a, b) {
    return a - b;
};

module.exports

module.exports 是真正用于导出模块的对象。可以直接将一个函数、对象或其他类型的值赋值给 module.exports

// person.js
module.exports = {
    name: 'John',
    age: 30,
    sayHello: function() {
        console.log('Hello!');
    }
};

模块的导入(require)

使用 require 函数可以导入其他模块。require 函数会返回被导入模块的 module.exports 对象。

// main.js
const math = require('./math');
const person = require('./person');

console.log(math.add(2, 3)); // 输出: 5
person.sayHello(); // 输出: Hello!

模块的加载机制

  • 优先从缓存中加载:Node.js 会缓存已经加载过的模块,当再次使用 require 加载同一个模块时,会直接从缓存中获取,避免重复加载。
  • 模块路径的解析require 函数支持相对路径和绝对路径,也可以省略文件扩展名,Node.js 会按 .js.json.node 的顺序尝试加载。

ES6 模块化在 Node.js 中的应用

ES6 模块化的基本语法

ES6 引入了新的模块化语法,使用 import 和 export 关键字。

导出

// utils.js
export const PI = 3.14;

export function square(x) {
    return x * x;
}

导入

// main-es6.js
import { PI, square } from './utils.js';

console.log(PI); // 输出: 3.14
console.log(square(5)); // 输出: 25

在 Node.js 中使用 ES6 模块化

在 Node.js 中使用 ES6 模块化需要满足以下条件:

  • 文件扩展名必须为 .mjs
  • 或者在 package.json 中添加 "type": "module"
{
    "name": "my-project",
    "type": "module",
    "version": "1.0.0"
}

包管理器(npm)

npm 简介

npm(Node Package Manager)是 Node.js 的官方包管理器,它允许开发者方便地安装、共享和管理第三方模块。npm 拥有庞大的包生态系统,涵盖了各种功能的模块。

初始化项目

在使用 npm 之前,需要先初始化项目,生成 package.json 文件。在项目根目录下运行以下命令:

npm init -y

-y 选项表示使用默认配置快速初始化项目。

安装包

安装本地包

本地包安装在项目的 node_modules 目录下,供当前项目使用。

npm install lodash

安装全局包

全局包安装在系统的全局环境中,可以在任何项目中使用。

npm install -g nodemon

3.4.4 管理依赖

package.json 文件中记录了项目的依赖信息,包括依赖的名称和版本号。

生产依赖和开发依赖

  • 生产依赖:项目运行时必需的依赖,使用 npm install 安装的默认就是生产依赖。

  • 开发依赖:只在开发过程中需要的依赖,使用 --save-dev 或 -D 选项安装。

收起

npm install eslint --save-dev

更新和卸载包

更新包

npm update lodash

卸载包

npm uninstall lodash

下一章详解一下npm