Skip to content

Commit 582ae05

Browse files
committed
Merge pull request #31 from 201-created/using-node-modules-path
Use ember-cli project `nodeModulesPath` when available
2 parents a685b8d + 8c581eb commit 582ae05

File tree

11 files changed

+148
-42
lines changed

11 files changed

+148
-42
lines changed

lib/dependency-checker.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,15 @@ function EmberCLIDependencyChecker(project, reporter) {
1818
this.reporter = reporter;
1919
}
2020

21+
// Legacy Ember-CLI (before 0.2.4) does not have a `nodeModulesPath` property
22+
function readNodeModulesPath(project) {
23+
if (project.nodeModulesPath) {
24+
return project.nodeModulesPath;
25+
} else {
26+
return path.join(project.root, 'node_modules');
27+
}
28+
}
29+
2130
EmberCLIDependencyChecker.prototype.checkDependencies = function() {
2231
if (alreadyChecked || process.env.SKIP_DEPENDENCY_CHECKER) {
2332
return;
@@ -51,19 +60,19 @@ EmberCLIDependencyChecker.prototype.readShrinkwrapDeps = function() {
5160
} catch(e) {
5261
// JSON parse error
5362
}
54-
return ShrinkWrapChecker.checkDependencies(this.project.root, shrinkWrapJSON);
63+
return ShrinkWrapChecker.checkDependencies(this.project.root, readNodeModulesPath(this.project), shrinkWrapJSON);
5564
} else {
5665
return [];
5766
}
5867
};
5968

6069
EmberCLIDependencyChecker.prototype.lookupNodeModuleVersion = function(name) {
61-
var nodePackage = path.join(this.project.root, 'node_modules', name, 'package.json');
70+
var nodePackage = path.join(readNodeModulesPath(this.project), name, 'package.json');
6271
return this.lookupPackageVersion(nodePackage);
6372
};
6473

6574
EmberCLIDependencyChecker.prototype.lookupBowerPackageVersion = function(name) {
66-
var packageDirectory = path.join(this.project.root, this.project.bowerDirectory, name);
75+
var packageDirectory = path.resolve(this.project.root, this.project.bowerDirectory, name);
6776
var version = null;
6877
if (fileExists(packageDirectory) && readDir(packageDirectory).length > 0) {
6978
var dotBowerFile = path.join(packageDirectory, '.bower.json');

lib/shrinkwrap-checker.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ ShrinkwrapChecker.prototype.check = function() {
1919
this.name, this.versionSpecified, versionInstalled, this.parents);
2020
};
2121

22-
ShrinkwrapChecker.checkDependencies = function(root, shrinkWrapJSON) {
22+
ShrinkwrapChecker.checkDependencies = function(root, nodeModulesPath, shrinkWrapJSON) {
2323
var resolvedDependencies = [];
2424
var currentNode;
2525

2626
var nodesToCheck = [{
2727
root: root,
28+
nodeModulesPath: nodeModulesPath,
2829
parents: [],
2930
childDependencies: shrinkWrapJSON.dependencies,
3031
name: shrinkWrapJSON.name,
@@ -46,8 +47,11 @@ ShrinkwrapChecker.checkDependencies = function(root, shrinkWrapJSON) {
4647
Object.keys(currentNode.childDependencies).forEach(function(childDepName){
4748
var childDep = currentNode.childDependencies[childDepName];
4849

50+
var root = path.join(currentNode.nodeModulesPath, childDepName);
51+
var nodeModulesPath = path.join(root, 'node_modules');
4952
nodesToCheck.push({
50-
root: path.join(currentNode.root, 'node_modules', childDepName),
53+
root: root,
54+
nodeModulesPath: nodeModulesPath,
5155
parents: parents,
5256
name: childDepName,
5357
childDependencies: childDep.dependencies,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"name": "project-npm-check",
3+
"dependencies": {
4+
}
5+
}

tests/fixtures/project-npm-sibling-node-modules-check/node_modules/ember-cli/package.json

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/fixtures/project-shrinkwrap-sibling-node-modules-check/app/npm-shrinkwrap.json

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"name": "test",
3+
"version": "1.0.0"
4+
}

tests/fixtures/project-shrinkwrap-sibling-node-modules-check/node_modules/minimist/package.json

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/helpers/project-builder.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
'use strict';
2+
3+
var defaultProject, projectBuilder;
4+
5+
function simpleMerge(target, object) {
6+
var merged = Object.create(target);
7+
for (var key in object) {
8+
merged[key] = object[key];
9+
}
10+
return merged;
11+
}
12+
13+
/*
14+
* Usage:
15+
*
16+
* var project = projectBuilder.build({
17+
* dependencies: projectBuilder.buildDependencies([
18+
* { some: object }
19+
* ],
20+
* root: 'some/alternative/root'
21+
* });
22+
*
23+
*
24+
*/
25+
projectBuilder = {
26+
27+
build: function projectBuilder$build(configuredProject) {
28+
var project = simpleMerge(defaultProject, configuredProject || {});
29+
return project;
30+
},
31+
32+
buildDependencies: function projectBuilder$buildDependencies(dependencies) {
33+
return function(){
34+
return dependencies || {};
35+
};
36+
},
37+
38+
buildBowerDependencies: function projectBuilder$buildBowerDependencies(dependencies) {
39+
return function(){
40+
return dependencies || {};
41+
};
42+
}
43+
};
44+
45+
defaultProject = {
46+
root: 'tests/fixtures/project-npm-check',
47+
bowerDirectory: 'bower_components',
48+
dependencies: projectBuilder.buildDependencies(),
49+
bowerDependencies: projectBuilder.buildBowerDependencies()
50+
};
51+
52+
module.exports = projectBuilder;

tests/unit/dependency-checker-bower-test.js

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,19 @@
33
var assertError = require('../helpers/assert-error');
44
var assertNoError = require('../helpers/assert-no-error');
55
var DependencyChecker = require('../../lib/dependency-checker');
6+
var projectBuilder = require('../helpers/project-builder');
67

78
describe('EmberCLIDependencyChecker', function() {
89
beforeEach(function(){
910
DependencyChecker.setAlreadyChecked(false);
1011
});
1112

12-
var createProject = function(bowerDependencies) {
13-
return {
13+
function createProject(bowerDependencies) {
14+
return projectBuilder.build({
1415
root: 'tests/fixtures/project-bower-check',
15-
bowerDirectory: 'bower_components',
16-
dependencies: function() {
17-
return {};
18-
},
19-
bowerDependencies: function() {
20-
return bowerDependencies || {};
21-
}
22-
};
23-
};
16+
bowerDependencies: projectBuilder.buildBowerDependencies(bowerDependencies)
17+
});
18+
}
2419

2520
var assertBowerError = function(project) {
2621
return assertError(project, 'bower');

tests/unit/dependency-checker-npm-test.js

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,19 @@
33
var assertError = require('../helpers/assert-error');
44
var assertNoError = require('../helpers/assert-no-error');
55
var DependencyChecker = require('../../lib/dependency-checker');
6+
var projectBuilder = require('../helpers/project-builder');
67

78
describe('EmberCLIDependencyChecker', function() {
89
beforeEach(function(){
910
DependencyChecker.setAlreadyChecked(false);
1011
});
1112

12-
var createProject = function(dependencies) {
13-
return {
14-
root: 'tests/fixtures/project-npm-check',
15-
bowerDirectory: 'bower_components',
16-
dependencies: function() {
17-
return dependencies || {};
18-
},
19-
bowerDependencies: function() {
20-
return {};
21-
}
22-
};
23-
};
13+
function createProject(dependencies, options) {
14+
options = options || {};
15+
options.root = options.root || 'tests/fixtures/project-npm-check';
16+
options.dependencies = projectBuilder.buildDependencies(dependencies);
17+
return projectBuilder.build(options);
18+
}
2419

2520
var assertNpmError = function(project) {
2621
return assertError(project, 'npm');
@@ -93,4 +88,16 @@ describe('EmberCLIDependencyChecker', function() {
9388
assertNoNpmError(project);
9489
});
9590
});
91+
92+
describe('sibling node_modules/ directory', function() {
93+
it('checks depdencies', function() {
94+
var project = createProject({
95+
'ember-cli': '*'
96+
}, {
97+
root: 'tests/fixtures/project-npm-sibling-node-modules-check/app',
98+
nodeModulesPath: 'tests/fixtures/project-npm-sibling-node-modules-check/node_modules',
99+
});
100+
assertNoNpmError(project);
101+
});
102+
});
96103
});

0 commit comments

Comments
 (0)