parcel-bundler
Version:
<p align="center"> <a href="https://parceljs.org/" target="_blank"> <img alt="Parcel" src="https://user-images.githubusercontent.com/19409/31321658-f6aed0f2-ac3d-11e7-8100-1587e676e0ec.png" width="749"> </a> </p>
28 lines (23 loc) • 668 B
JavaScript
const {dirname} = require('path');
const resolve = require('resolve');
const install = require('./installPackage');
const cache = new Map();
async function localRequire(name, path, triedInstall = false) {
let basedir = dirname(path);
let key = basedir + ':' + name;
let resolved = cache.get(key);
if (!resolved) {
try {
resolved = resolve.sync(name, {basedir});
} catch (e) {
if (e.code === 'MODULE_NOT_FOUND' && !triedInstall) {
await install(path, name);
return localRequire(name, path, true);
}
throw e;
}
cache.set(key, resolved);
}
return require(resolved);
}
module.exports = localRequire;