6.find-up库的源码解析

6.find-up库的源码解析

该库用于在某个目录下向上找指定文件

找到返回该文件路径,找不到返回null

  • 同步的使用
const findUp = require("find-up")

const fp = findUp.sync('package.json', {cwd: "a/b/c/d"});
  • 同步的源码
const path = require('path');
const locatePath = require('locate-path');

module.exports.sync = (filename, opts) => {
	opts = opts || {};

	let dir = path.resolve(opts.cwd || '');
    
    // 获取根路径,如果根路径都还没找到,那么就是没找到,返回null
	const root = path.parse(dir).root;

	const filenames = [].concat(filename);

	// 写了一个死循环,通过dir = path.dirname(dir)一级级往上找,找到就返回,如果到dir与根路径root一样还没找到,就返回null
	while (true) {
		const file = locatePath.sync(filenames, {cwd: dir});

		if (file) {
			return path.join(dir, file);
		} else if (dir === root) {
			return null;
		}

		dir = path.dirname(dir);
	}
};
  • 同步方法源码知识点
    • while死循环要注意打破的条件,一般通过以下方法打破:
      • return
      • break
    • path.parse(路径)
      • 返回:
        • root 根路径
        • dir 父文件夹路径
        • base 最后一级路径
        • ext 后缀,文件有后缀,文件夹没后缀为空字符串
        • name 最后一级的文件名(不带后缀)或文件夹名
      • 举例:path.parse("/a/b/c.js")
        • 答案:{ root: '/', dir: '/a/b', base: 'c.js', ext: '.js', name: 'c' }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值