spinjs
Version:
[](https://gitter.im/sysgears/spinjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [ • 1.14 kB
text/typescript
import * as path from 'path';
import * as requireRelative from 'require-relative';
export interface RequireFunction {
cwd: string;
(name, relativeTo?): any;
resolve(name, relativeTo?): string;
probe(name, relativeTo?): string;
}
export default (cwd: string): RequireFunction => {
const require: any = (name, relativeTo?): any => requireModule(name, relativeTo || cwd);
require.resolve = (name, relativeTo?): string => requireModule.resolve(name, relativeTo || cwd);
require.probe = (name, relativeTo?): string => requireModule.probe(name, relativeTo || cwd);
require.cwd = cwd;
return require;
};
const requireModule: any = (name, relativeTo): any => {
return name.indexOf('.') !== 0 ? requireRelative(name, relativeTo) : require(path.join(relativeTo, name));
};
requireModule.resolve = (name, relativeTo): string => {
return name.indexOf('.') !== 0
? requireRelative.resolve(name, relativeTo)
: require.resolve(path.join(relativeTo, name));
};
requireModule.probe = (name, relativeTo): string => {
try {
return requireModule.resolve(name, relativeTo);
} catch (e) {
return null;
}
};