Skip to content

Commit a737d43

Browse files
author
Ben Newman
committed
Properly save "_resolved" and "_from" fields in npm-shrinkwrap.json.
Versions 2.x and 3.x of npm prefix internal package.json fields with underscores, though `npm shrinkwrap` removes the underscores, so fields like "_resolved" become just "resolved" in the shrinkwrap file. This commit also fixes meteor#5940.
1 parent f595034 commit a737d43

File tree

1 file changed

+20
-21
lines changed

1 file changed

+20
-21
lines changed

tools/isobuild/meteor-npm.js

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -234,15 +234,14 @@ var updateExistingNpmDirectory = function (packageName, newPackageNpmDir,
234234
// be careful not to make the common case of no changes too
235235
// slow.
236236
if (_.isEqual(installedDependencies, npmDependencies)) {
237-
// OK, so what we have installed matches the top-level dependencies
238-
// specified in `Npm.depends`. But what if we just pulled a change in
239-
// npm-shrinkwrap.json to an indirectly used module version? We'll have to
240-
// compare more carefully. First, normalize the tree (strip irrelevant
241-
// fields and normalize to 'version').
242-
var minimizedInstalled = minimizeDependencyTree(installedDependenciesTree);
243-
// If what we have installed is the same as what we have shrinkwrapped, then
244-
// we're done.
245-
if (_.isEqual(minimizedInstalled, shrinkwrappedDependenciesTree)) {
237+
// What we have installed matches the top-level dependencies specified
238+
// in `Npm.depends`. But what if we just pulled a change in
239+
// npm-shrinkwrap.json to an indirectly used module version? We'll
240+
// have to compare more carefully. First, normalize the tree (strip
241+
// irrelevant fields and normalize to 'version'). If what we have
242+
// installed is the same as what we have shrinkwrapped, we're done.
243+
if (_.isEqual(minimizeDependencyTree(installedDependenciesTree),
244+
minimizeDependencyTree(shrinkwrappedDependenciesTree))) {
246245
return;
247246
}
248247
}
@@ -484,17 +483,19 @@ function getInstalledDependenciesTree(dir) {
484483
if (! pkg) return;
485484
}
486485

487-
const info = result[item] = {};
486+
const info = result[item] = {
487+
version: pkg.version
488+
};
488489

489-
function copy(name) {
490-
if (pkg[name]) {
491-
info[name] = pkg[name];
492-
}
490+
const resolved = pkg._resolved || pkg.resolved;
491+
if (resolved) {
492+
info.resolved = resolved;
493493
}
494494

495-
copy("version");
496-
copy("resolved");
497-
copy("from");
495+
const from = pkg._from || pkg.from;
496+
if (from) {
497+
info.from = from;
498+
}
498499

499500
const deps = ls(files.pathJoin(pkgDir, "node_modules"));
500501
if (deps && ! _.isEmpty(deps)) {
@@ -645,9 +646,7 @@ var ensureConnected = function () {
645646

646647
// `npm shrinkwrap`
647648
function shrinkwrap(dir) {
648-
const tree = minimizeDependencyTree(
649-
getInstalledDependenciesTree(dir)
650-
);
649+
const tree = getInstalledDependenciesTree(dir);
651650

652651
files.writeFile(
653652
files.pathJoin(dir, "npm-shrinkwrap.json"),
@@ -664,7 +663,7 @@ var minimizeDependencyTree = function (tree) {
664663
var minimizeModule = function (module) {
665664
var version;
666665
if (module.resolved &&
667-
!module.resolved.match(/^https:\/\/registry.npmjs.org\//)) {
666+
!module.resolved.match(/^https?:\/\/registry.npmjs.org\//)) {
668667
version = module.resolved;
669668
} else if (utils.isNpmUrl(module.from)) {
670669
version = module.from;

0 commit comments

Comments
 (0)