每一个js文件,天生都有一个 属性 module 存储相关的信息内容

    console.log(module);
    // 显示内容
    Module {
        id: '.',
        // 当前文件的路径
        path: 'F:自定义模块',
        // 导出的内容
        exports: {},
        parent: null,
        // 当前文件的名称
        filename: 'F:自定义模块\\a.js',
        // 是否有导入 加载依赖其他文件
        loaded: false,
        // 是否有其他文件导入 依赖当前文件
        children: [],
        paths: [
            'F: 自定义模块\\node_modules',
        ]
    }

当前模块文件

通过 module.exports = {} 设定导出的内容
只有导出的数据,才能被其他文件加载使用

其他 js文件

通过 require(路径) 来导入加载依赖外部js文件
将导入的数据,存储在变量中,数据类型是一个对象

必须要注意:

其他加载的文件中,如果有输出内容,也会显示在执行结果中
但是这个内容是直接输出的,是不能调用使用的

模块化实例

 第一个JS文件-a.js

let int = 100;
let str = '北京';
const obj = {name:'张三',age:18};
const arr = [1,2,3,4,5];
function fun(a){
    return a;
}

// 通过  module.exports 添加 导出内容
// 导出内容是以对象的形式,导出的
// 当前文件中的所有的变量,都可以导出

// 输出的内容,只能显示不能使用
console.log( 12345 );

module.exports = {
    // 导出一个数据,键名的是integer 键值是 变量int 中存储的数据 100
    // obj没有导出所以不能使用
    integer:int,
    string:str,
    array:arr,
    function:fun,
}

 第二个JS文件-b.js

// 通过 require 来 导入记载 a.js 中 导出的数据
// 从在 result 中 数据类型是一个对象
const result = require('./a.js');
console.log(result);
//  {
//     integer: 100,
//     string: '北京',
//     array: [ 1, 2, 3, 4, 5 ],
//     function: [Function: fun]
//   }

// 将a中的值在b中使用
const { string, integer ,array} = require('./a.js');
console.log(array);  //[ 1, 2, 3, 4, 5 ]
array[0]=0;
console.log(array);  //[ 0, 2, 3, 4, 5 ]
console.log(result.array);  //[ 0, 2, 3, 4, 5 ]
// a.js中的值也会进行改变

// 使用a.js中的方法
console.log(result.function('aaaa'));  //aaaa

let a = string;
module.exports = {
    number:a,
}

 第三个JS文件-demo.js

// 在 demo.js 中 导入 b.js 
// 我们不需要管 b.js 文件对谁有依赖
// 导入b.js 时 b.js 会自动加载导入 a.js
// demo.js 中 只需要导入 b.js 就可以了
const res = require('./b.js');

console.log(res);  //{ number: '北京' }

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。