欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

10行代码实现require功能

程序员文章站 2022-04-20 22:03:06
首先来介绍本文用到的fs模块知识 fs = require(‘fs’)这一句代码就是node的引入文件模块,可以进行文件操作 fs.readfilesync(modulena...

首先来介绍本文用到的fs模块知识

fs = require(‘fs’)这一句代码就是node的引入文件模块,可以进行文件操作 fs.readfilesync(modulename,”utf8”);//node的读文件方法,返回读取的内容,参数为文件路径,编码格式

new function知识

new function可以产生一个普通的函数fn,那么fn与function之间有什么关系呢?

new funtion中最后一个参数,就是fn的函数执行体 new funtion中其余参数,为new funtion中最后一个参数的参数,也就是fn函数执行体的参数 new funtion所有的参数都为字符串
    //举一个简单的例子
    function(a,b){
        return a+b;
    }
    //就可以写成
    let fn = new function('a','b','return a+b'); 

commonjs知识点

commonjs是一种js模块化规范。
核心思想是通过‘require’方法来同步加载依赖的其他模块,通过‘module.exports’到处需要暴露的接口

采用commonjs导入及到处的代码如下:

导入

let str = require('./a.js');
console.js(str);//'欢迎光临'

导出a.js文件

module.exports = '欢迎光临';

那么,具备了以上知识之后,就可以写出以下代码阿里实现require功能了!!!

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

/*
    原生js实现require功能
        - fs模块  文件操作

*/
let fs = require('fs');//node的文件模块,可以进行文件操作
function requirecustom(modulename){
    /*
        modulename 要读的文件的路径
    */
    let content = fs.readfilesync(modulename,"utf8");//node的读文件方法,返回读取的内容,参数为文件路径,编码格式
    // console.log(content);
    /*
        new function(),最后一个参数是函数的执行体,前面其余都是最后这个执行体参数的参数,所有参数都是字符串格式
    */
    let fn = new function("exports",'module','require','__dirname','__filename',content + "\n return module.exports");

    let module = {
        exports:{}
    }
    return fn(module.exports,module,requirecustom,__dirname,__filename);
    /*
        上面的函数其实就是:
            function(exports,module,require,__dirname,__filename){
                module.exports = "欢迎你";
                return module.exports;
            }

    */
}

let str = requirecustom('./a.js');
console.log(str);//‘欢迎你’