node的暴露和引入

  • 官方文档

  • 为什么需要暴露, 在项目的开发过程中,我们不可能在在一个文件当中写上所有的js代码,一般是将js代码分解成一个一个独立的模块,随后在项目所要用到的地方引用即可, 这就涉及了模块化的暴露引入了 !

  • 要知道我们的node遵循的是commonJs语法,因此, 我们可以把公共的功能 抽离成为一个单独的 js 文件 作为一个模块,默认情况下面这个模块里面的方法或者属性,外面是没法访问的。如果要让外部可以访问模块里面的方法或者属性,就必须在模块里面通过 exports 或者 module.exports 暴露属性或者方法。

commonJS规范的模块暴露和引入(node默认)

commonJS暴露的两种方法:

module.exports = {需要暴露的模块}

exports.xxx = 模块里面的某个接口(方法,函数)

commonJS的引入

const xxx = require('./模块的相对路径') //切记 xxx(模块) 最后生成的是一个对象

代码展示:

  • 文件目录如下(在不同的文件当中引入和暴露)
# 模块化
└── 01-暴露和引入 # 项目文件夹
├── index.js # 接收引入暴露的模块
└── module1.js # 暴露模块
  • index.js(引入接收暴露过来的模块)
// 1.引入 暴露的模块
const mokuai = require('./module1') //切记 mokuai(模块) 最后生成的是一个对象

// 2.输出暴露的模块, 由此可以看到,我们是以对象的形式接收暴露过来的模块的
console.log(mokuai);

// 3.对象式引入模块时的调用方法
mokuai.sayHi()
mokuai.add(1 , 2)
  • module1.js(暴露模块的js文件)
// node 模块化暴露的两种方法

function sayHi(){
console.log('Hello! Node');
}

function add(a , b) {
console.log(`相加结果为: ${a+b}`);
}

// 方法一:****************************************

// 1.单独引入某一个方法或对象
module.exports = sayHi

// 2.对象式引入(推荐使用)
module.exports = {
sayHi,
add
}

// 方法二: (分别暴露) ******************************
exports.sayHi = sayHi
exports.add = add

结果展示:

image

ES.JS规范的模块化暴露和引入(需要单独设置)

  • node版本13.2之后, 在舆论的压力下, node开始引入和支持ES的模块化语法了,蛋是一直是处于实验性阶段, 官方也不推荐使用
  • 使用的前提条件是两者选其一:
    • 1. 在模块的package.json中添加 "type" : "module"
    • 2. 封装的模块使用mjs为后缀

使用流程:

  • 文件目录如下(在不同的文件当中引入和暴露)
# 模块化
└── 02-ES模块化写法 # 项目文件夹
├── index.js # 接收引入暴露的模块
└── module.js # 暴露模块
  1. 首先使用创建package.json文件
npm init

image

  1. 封装模块(module.js)
// ES规范暴露模块(顺便做一个复习)

// 创建方法(函数):
function sayHi(){
console.log('Hello! Node');
}

function add(a , b) {
console.log(`相加结果为: ${a+b}`);
}

// 1.默认暴露
export default {
sayHi,
add
}

// 2.统一暴露
export {sayHi,add}

// 3.分别暴露
export let a = 2
export function add1(a , b){
console.log(`相加结果为: ${a+b}`);
}
  1. 引入接收暴露过来的模块(index.js)
// ES规范引入
// 1. 简便引入只能针对默认暴露
// import mokuai from './module.js'

// 2. 通用引入(所有暴露方法都能使用)
import * as mokuai from './module.js'

// 3. 解构赋值引入
import {sayHi , add} from './module.js'

console.log(mokuai);//全局引入和简便引入的结果

console.log( sayHi, add);//解构赋值引入的结果

结果展示:

image

npm的基本使用(指令)

npm init  //初始化项目,编写 package.json 文件
npm install 包名 –g (uninstall,update) //安装,卸载和更新包
npm install 包名 --save-dev (uninstall,update) //安装,卸载和更新包
npm list -g (不加-g,列举当前目录下的安装包)
npm info 包名(详细信息) npm info 包名 version(获取最新版本)
npm install md5@1(安装指定版本)
npm outdated(  检查包是否已经过时)

// package.json中的一些依赖问题
"dependencies": { "md5": "^2.1.0" } ^ 表示 如果 直接npm install 将会 安md5
2.*.* 最新版本

"dependencies": { "md5": "~2.1.0" } ~ 表示 如果 直接npm install 将会 安装md5 2.1.* 最新版本

"dependencies": { "md5": "*" } * 表示 如果 直接npm install 将会 安装 md5 最新版本