merge-packages
Very intelligently merge package.json
files. 2021 UP_TO_DATE VERSION OF THIS TOOL.
Features
- [x] merge
dependencies/devDependencies/peerDependencies
with semver rules respected - [x] merge
bin
field intelligently - [x] combine
description
field's value - [x] retain some fields of the first
package.json
- [x] sort the merged
package.json
fields - [x] provide cli tools
Start
Install
npm install --save merge-packages
# or with yarn
yarn add merge-packages
Usage
CLI
merge-packages [options] [pkgs...]
-
pkgs Argument
pkgs
is the files or directories to merge. When passing a directory, a minimatch expressionpackage*(.*).json
will be used to match files exceptpackage.merged.json
. If no arguments passed, the result will be like passing a directory./
; -
options
-
output: The output filename. Default to
package.merged.json
. If already exists, will use filenamepackage.merged1.json
, and the like.
-
output: The output filename. Default to
Install globally
npm install --global merge-packages
merge-packages -h
merge-packages package.a.json package.b.json packagesSubDir
NPX
npx merge-packages -h
Node
- Merge two
package.json
files
import fs from 'fs';
import mergePackages from 'merge-package';
const pkgStr1 = fs.readFileSync('./a/package.json', 'utf8');
const pkgStr2 = fs.readFileSync('./b/package.json', 'utf8');
// only support string. buffer is not supported
const mergedPkgStr = mergePackages(pkgStr1, pkgStr2);
fs.writeFileSync('./package.json', mergedPkgStr);
- Merge two
package.json
objects
import { mergeJson } from 'merge-package';
const pkg1 = {
name: 'my-package',
bin: {
'my-test': 'bin/my-test.js'
},
dependencies: {
'merge-packages': '0.1.0',
'@babel/core': '^7.13.10'
}
};
const pkg2 = {
name: 'my-cli',
bin: 'bin/cli.js',
devDependencies: {
'rimraf': '^3.0.2'
},
dependencies: {
'@babel/core': '^7.13.0'
}
};
const mergedPkg = mergeJson(pkg1, pkg2);
console.log(mergedPkg);
Contributing
Recently changes
See the change log.