mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
npm: enable pinning subdependencies to github tarballs
also some minor reorg
This commit is contained in:
committed by
David Glasser
parent
65e8b86421
commit
401e29083c
@@ -48,6 +48,7 @@ var meteorNpm = module.exports = {
|
||||
// - call `npm install`, which reads from npm-shrinkwrap.json
|
||||
// - call `npm install name@version` for any package that needs to be updated
|
||||
// - call `npm prune` to remove any unused packages from node_modules
|
||||
// - delete package.json, to ensure that npm-shrinkwrap.json generated below doesn't contain "name" and "version"
|
||||
// - call `npm shrinkwrap` to update npm-shrinkwrap.json
|
||||
// - copy the temporary directory back to .npm
|
||||
self._updateExistingNpmDirectory(packageName, newPackageNpmDir, packageNpmDir, npmDependencies);
|
||||
@@ -104,7 +105,18 @@ var meteorNpm = module.exports = {
|
||||
// remove ununsed packages
|
||||
self._prune(newPackageNpmDir);
|
||||
|
||||
self._finalizeTmpPackageDirAndRename(newPackageNpmDir, packageNpmDir);
|
||||
// delete package.json
|
||||
fs.unlinkSync(path.join(newPackageNpmDir, 'package.json'));
|
||||
|
||||
// if we had no installed dependencies to begine with, *DON'T*
|
||||
// shrinkwrap. this is important so that we can pin versions of
|
||||
// deep dependencies to tarballs, e.g.
|
||||
// https://github.com/meteor/js-bson/tarball/master
|
||||
if (!_.isEmpty(installedDependencies)) {
|
||||
self._shrinkwrap(newPackageNpmDir);
|
||||
}
|
||||
|
||||
self._renameAlmostAtomically(newPackageNpmDir, packageNpmDir);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -116,7 +128,9 @@ var meteorNpm = module.exports = {
|
||||
self._installNpmModule(name, version, newPackageNpmDir);
|
||||
});
|
||||
|
||||
self._finalizeTmpPackageDirAndRename(newPackageNpmDir, packageNpmDir);
|
||||
self._shrinkwrap(newPackageNpmDir);
|
||||
|
||||
self._renameAlmostAtomically(newPackageNpmDir, packageNpmDir);
|
||||
},
|
||||
|
||||
_execFileSync: function(file, args, opts) {
|
||||
@@ -144,20 +158,14 @@ var meteorNpm = module.exports = {
|
||||
fs.writeFileSync(packageJsonPath, packageJsonContents);
|
||||
},
|
||||
|
||||
// - call `npm shrinkwrap`
|
||||
// - delete package.json
|
||||
// - rename original .npm dir to another name (require for atomicity in next step)
|
||||
// - atomically rename temporary package npm dir to the original package's .npm dir
|
||||
// - delete the renamed original .npm directory
|
||||
_finalizeTmpPackageDirAndRename: function(newPackageNpmDir, packageNpmDir) {
|
||||
_renameAlmostAtomically: function(newPackageNpmDir, packageNpmDir) {
|
||||
var self = this;
|
||||
|
||||
if (fs.existsSync(path.join(newPackageNpmDir, 'package.json')))
|
||||
fs.unlinkSync(path.join(newPackageNpmDir, 'package.json'));
|
||||
self._shrinkwrap(newPackageNpmDir);
|
||||
var oldPackageNpmDir = packageNpmDir + '-old-' + self._randomToken();;
|
||||
|
||||
if (fs.existsSync(packageNpmDir)) {
|
||||
var oldPackageNpmDir = packageNpmDir + '-old-' + self._randomToken();;
|
||||
fs.renameSync(packageNpmDir, oldPackageNpmDir);
|
||||
fs.renameSync(newPackageNpmDir, packageNpmDir);
|
||||
files.rm_recursive(oldPackageNpmDir);
|
||||
|
||||
Reference in New Issue
Block a user