当前位置: 移动技术网 > IT编程>网页制作>CSS > 10行代码实现require功能

10行代码实现require功能

2019年01月11日  | 移动技术网IT编程  | 我要评论

首先来介绍本文用到的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);//‘欢迎你’

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网