@satispunk/packagelink v0.2.0
@satispunk/packagelink
npm link alternative tool
Use case
There are two main points why this I created this package:
- Link local packages in a consumer application in scenarios where
npm linkdoes not work well. - Be able to run local packages in CI environment skipping package publishing to npm repository.
Problem with npm link
Though npm link is great tool, it does not work well in some scenarios.
If local package has dependencies react or react-redux then those dependencies will be bundled and used twice,
as webpack finds modules by its real path.
How does it work
There are two modes publish and install.
You can publish packages from local repository to the OS temp directory.
Each published package is packed to a corresponding .tgz file.
Then you can install packages in a consumer application. Each installed .tgz file is copied to a consumer application folder.
Example
Installation
npm install --save-dev @satispunk/packagelinkor install it globally
npm install -g @satispunk/packagelinkSingle package
- run
packagelink publishfrom the local package root folder where package.json is present. - run
packagelink install my-package-namefrom the consumer application root folder.
Mono repository
Installing multiple packages 1 by 1 from mono repository might be annoying. So there is configuration file that can help automate things.
- create
packagelink.config.jsin the local package root folder - specify paths to packages you want to publish. for lerna monorepo it could be:
const path = require('path');
const glob = require('glob');
module.exports = {
publish: {
packages: glob.sync(path.resolve(__dirname, 'packages/*')),
},
}- run
packagelink publish. if packages are present in config it will try to publish them instead of using package.json file. - create
packagelink.config.jsin the consumer application root folder - specify dependencies you would like to install
module.exports = {
install : {
dependencies: [
'my-package1',
],
devDependencies: [
'my-package2',
]
},
}- run
packagelink install
CLI
packagelink publish
Publish local packages based packagelink.config.js or package.json
packagelink install packageName
Install packages based packagelink.config.js or provided packageName argument.
If --dev is set, packages is installed as devDependency.
Config
For publish
const path = require('path');
const glob = require('glob');
module.exports = {
publish: {
packages: glob.sync(path.resolve(__dirname, 'packages/*')),
},
}For install
module.exports = {
install : {
dependencies: [
'my-package1',
],
devDependencies: [
'my-package2',
]
},
}