Skip to content

Commit 47906ba

Browse files
authored
fix(build-resources): root module paths can be scoped
1 parent ae101c6 commit 47906ba

File tree

1 file changed

+31
-14
lines changed

1 file changed

+31
-14
lines changed

src/build-resources.js

+31-14
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,43 @@ const debugDetail = require('debug')('webpack-plugin/details');
1313
* this global var is reset every run in case of circular dependencies between files
1414
*/
1515
let modulesProcessed = [];
16-
/**
17-
* this is used for displaying logs only
18-
*/
19-
let optionsGlobal = {};
2016
let baseVendorPkg;
2117
let moduleRootOverride = {};
2218
let modulePaths = [];
2319
let moduleNames = [];
2420

25-
function installedRootModulePaths() {
26-
return fileSystem.readdirSync(path.join(optionsGlobal.root, 'node_modules'))
27-
.filter(dir => !(/^\./.test(dir)))
28-
.map(dir => path.resolve(optionsGlobal.root, 'node_modules', dir));
21+
function installedRootModulePaths(moduleDir, ensurePackageJson = true) {
22+
let rootModules = fileSystem.readdirSync(moduleDir)
23+
.filter(dir => !(/^\./.test(dir)));
24+
25+
let scoped = rootModules
26+
.filter(dir => dir.indexOf('@') === 0);
27+
28+
rootModules = rootModules
29+
.filter(dir => dir.indexOf('@') !== 0)
30+
.map(dir => path.resolve(moduleDir, dir));
31+
32+
scoped.forEach(dir => {
33+
rootModules = rootModules.concat(installedRootModulePaths(dir, false));
34+
});
35+
36+
if (ensurePackageJson) {
37+
// ensure package.json exists:
38+
rootModules = rootModules
39+
.filter(dir => {
40+
let stats;
41+
try { stats = fileSystem.statSync(path.join(dir, 'package.json')) } catch (_) {}
42+
return stats && stats.isFile();
43+
});
44+
}
45+
46+
return rootModules;
2947
}
3048

31-
function installedLocalModulePaths() {
32-
return execa('npm', ['ls', '--parseable'], { cwd: optionsGlobal.root })
33-
.then(res => installedRootModulePaths().concat(res.stdout.split('\n').filter((line, i) => i !== 0 && !!line)))
34-
.catch(res => installedRootModulePaths().concat(res.stdout.split('\n').filter((line, i) => i !== 0 && !!line)));
49+
function installedLocalModulePaths(options) {
50+
return execa('npm', ['ls', '--parseable'], { cwd: options.root })
51+
.then(res => installedRootModulePaths(path.join(options.root, 'node_modules')).concat(res.stdout.split('\n').filter((line, i) => i !== 0 && !!line)))
52+
.catch(res => installedRootModulePaths(path.join(options.root, 'node_modules')).concat(res.stdout.split('\n').filter((line, i) => i !== 0 && !!line)));
3553
}
3654

3755
function getFilesRecursively(targetDir, extension) {
@@ -61,15 +79,14 @@ function getFilesRecursively(targetDir, extension) {
6179
*/
6280
export async function processAll(options) {
6381
modulesProcessed = [];
64-
optionsGlobal = options;
6582
const dependencies = {};
6683
const nodeModules = path.join(options.root, 'node_modules');
6784
const packageJson = path.join(options.root, 'package.json');
6885

6986
debugDetail(`starting resolution: ${options.root}`);
7087

7188
if (modulePaths.length === 0) {
72-
modulePaths = (await installedLocalModulePaths())
89+
modulePaths = (await installedLocalModulePaths(options))
7390
.map(line => path.normalize(line));
7491
moduleNames = modulePaths
7592
.map(line => {

0 commit comments

Comments
 (0)