go>> smv>> 返回
项目作者: thefill

项目描述 :
Typed semantic versioner & semantic diff tool
高级语言: TypeScript
项目地址: git://github.com/thefill/smv.git
创建时间: 2019-06-14T19:27:25Z
项目社区:https://github.com/thefill/smv

开源协议:MIT License

下载


SMV

Typed semantic versioner & diff module

Code quality
Coverage
Greenkeeper badge
CricleCi badge

npm version
Open issues
Types: TypeScript
License: MIT

Main features

  • tiny & easy to use: 1 powerful merge method, rest is plain old semver
  • returns descriptive merge conflict details
  • 1 dependency (for dist)
  • Typescript types included
  • exposes esm/cjs modules
  • always 100% test coverage

Guide

Installation

  1. npm install --save smv

or

  1. yarn add smv

or

  1. pnpm --save smv

Basic usage

Doing it semver-style

SMV is a typed replacement for semver package as it proxies all semver-like methods to the semver.
Full list of supported methods can be found on the semver github page.

  1. const SMV = require('smv@1.0.0').SMV;
  2. const smv = new SMV();
  3.  
  4. const major = smv.major('1.2.3');
  5. console.log('major', major);
  6.  
  7. const equal = smv.eq('1.2.3', '2.3.4');
  8. console.log('equal?', equal);
  9.  
  10. const greater = smv.gt('1.2.3', '2.3.4');
  11. console.log('greater?', greater);
  12.  
  13. const lower = smv.ltr('1.2.3', '^1.3.4');
  14. console.log('lower than range?', lower);

Dependency merge

With SMV you can resolve dependencies from multiple sources.

Imagine how you would programmatically merge devDependencies from few package.json files?

  1. const SMV = require('smv@1.0.0').SMV;
  2. const smv = new SMV();
  3.  
  4. const sourceA = {
  5. packageA: '1.2.3',
  6. packageB: '1.2.3',
  7. packageC: '0.0.1',
  8. }
  9. const sourceB = {
  10. packageA: '1.2.3',
  11. packageB: '1.2.3'
  12. }
  13.  
  14. const digest = smv.merge({sourceA, sourceB});
  15.  
  16. console.log('Has conflicts?', digest.hasConflicts);
  17. console.log('Final result', digest.result);
  18. console.log('Conflicts', digest.conflicts);
  19. console.log('Resolved digest', digest.resolved);

Un-conflicting dependencies are easy - you can deal with them using basic JS techniques.

How about conflicting dependencies?

  1. const SMV = require('smv@1.0.0').SMV;
  2. const smv = new SMV();
  3.  
  4. const sourceA = {
  5. packageA: '1.2.3',
  6. packageB: '^1.2.3',
  7. packageC: '0.0.1',
  8. }
  9. const sourceB = {
  10. packageA: '1.2.3',
  11. packageB: '1.0.3'
  12. }
  13.  
  14. const digest = smv.merge({sourceA, sourceB});
  15.  
  16. console.log('Has conflicts?', digest.hasConflicts);
  17. console.log('Final result', digest.result);
  18. console.log('Conflicts', digest.conflicts);
  19. console.log('Resolved digest', digest.resolved);

Advanced usage

Forced dependency merge

There are situations when you don’t want to waste time resolving conflicts.
SMV allows you to enforce recommended versions (from resolved digest) as a final result.

  1. const SMV = require('smv@1.0.0').SMV;
  2. const smv = new SMV();
  3.  
  4. const sourceA = {
  5. packageA: '1.2.3',
  6. packageB: '^1.2.3',
  7. packageC: '0.0.1',
  8. }
  9. const sourceB = {
  10. packageA: '1.2.3',
  11. packageB: '1.0.3'
  12. }
  13.  
  14. // notice 2nd param passed to the merge method - thats forceRecommended flag
  15. const digest = smv.merge({sourceA, sourceB}, true);
  16.  
  17. console.log('Has conflicts?', digest.hasConflicts);
  18. console.log('Final result', digest.result);
  19. console.log('Conflicts', digest.conflicts);
  20. console.log('Resolved digest', digest.resolved);

Documentation

Full API documentation for this package can be found here