Я пытался выяснить, как npm установить выбранные версии для зависимостей, вот мой вывод:
rollup-plugin-uglify@3.0.0
имеет следующие зависимости:
dependencies: {
uglify-es: "^3.3.7"
}
После установки , это результат npm ls
:
└─┬ rollup-plugin-uglify@3.0.0
└─┬ uglify-es@3.3.9
├── commander@2.13.0
└── source-map@0.6.1
Установленная версия для uglify-es
- 3.3.9, а самая последняя версия - 3.3.10 ref link .
Затем я проверил этот официальный онлайн semver calculator и нашел этот лог c в исходном коде сайта:
$scope.checkVersions = function() {
var maxVersion = latest
if (!semver.satisfies(maxVersion, $scope.range)) maxVersion = null;
for (var i=0, len=versions.length; i<len; i++) {
$scope.versions[i].satisfies = distTags[$scope.range] === $scope.versions[i].version ||
(semver.satisfies($scope.versions[i].version, $scope.range) &&
(!maxVersion || semver.lte($scope.versions[i].version, maxVersion)));
}
}
Кажется, удовлетворяет ли 'последняя' версия в dist-tag заданный диапазон, то это будет максимальная версия довольной версии. В этом случае «последний» в dist-tag для uglify-es
равен 3.3.9, поэтому 3.3.10 не выбран.
Я просто хочу спросить причину такого дизайна, и, поскольку я также работаю над npm вычислением дерева зависимостей, есть ли документация для подробных правил анализа зависимостей для таких маленьких хитростей, как этот?