UNPKG

1.18 kBJavaScriptView Raw
1'use strict';
2const path = require('path');
3const resolveCwd = require('resolve-cwd');
4const pkgDir = require('pkg-dir');
5
6module.exports = filename => {
7 const globalDir = pkgDir.sync(path.dirname(filename));
8 const relativePath = path.relative(globalDir, filename);
9 const pkg = require(path.join(globalDir, 'package.json'));
10 const localFile = resolveCwd.silent(path.join(pkg.name, relativePath));
11 const localNodeModules = path.join(process.cwd(), 'node_modules');
12
13 const filenameInLocalNodeModules = !path.relative(localNodeModules, filename).startsWith('..') &&
14 // On Windows, if `localNodeModules` and `filename` are on different partitions, `path.relative()` returns the value of `filename`, resulting in `filenameInLocalNodeModules` incorrectly becoming `true`.
15 path.parse(localNodeModules).root === path.parse(filename).root;
16
17 // Use `path.relative()` to detect local package installation,
18 // because __filename's case is inconsistent on Windows
19 // Can use `===` when targeting Node.js 8
20 // See https://github.com/nodejs/node/issues/6624
21 return !filenameInLocalNodeModules && localFile && path.relative(localFile, filename) !== '' && require(localFile);
22};