内部使用的解析require

RegExp.escape = function (s) {
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};
let hh=['','-','=','+',"{",'[','(','*',"~","/","%",">","<","!","^","|","?"];
var fs = require('fs');
var file = './code.js';
var yuanshi = fs.readFileSync(file, 'utf8');
var newstr = '';
yuanshi.split('\n').forEach(function (item) {
newstr += replaceRequire(item) + "\n";
});
console.log(newstr);
function replaceRequire(str) {
let s, arr = [],yinhao = '"';
str = str.replace(/'.*?'|".*?"/g, function (match, offset, string) {
let ran = (Math.random() + "").slice(2);
arr.push({ran: ran, str: match});
return ran;
});
let str1 = str.slice(str.lastIndexOf('//'));
str = str.slice(0, str.lastIndexOf('//'));
arr.forEach(item => {
str = str.replace(item.ran, item.str);
str1 = str1.replace(item.ran, item.str);
});
function handler(match, p1,p2) {
let flag=false;
for(let i in hh){
flag = flag||match.trim().indexOf(hh[i]+'require')==0;
}
if(!flag){
return match;
}
p1=p1||p2;
let re = new RegExp(`${yinhao}.*?${RegExp.escape(match)}.*?${yinhao}`);
let search = str.search(re);
return search == -1 ? match.replace(p1, (pp = p1.split(''), pp.splice(1, 0, '@'), pp.join(''))) : match;
}
s = str.replace(/.?require\s*\(\s*('.*?')\s*\)/g, handler);
yinhao = "'";
s = s.replace(/.?require\s*\(\s*(".*?")\s*\)/g, handler);
return s.slice(0) + str1;
}
/*
 // 测试用例如下:
 var fs = require('@fs');
 // require('fs');
 var a = require('@lib/a'), b = require('@lib/b'); // c = require('c');
 var h = "test require('lib/a')";
 var h2 = 'test require("lib/a")';
 require ('@c');
 require ( '@d' );
 $require('e');
 $.require('f');
 requireAll('g');
 */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值