npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@satispunk/packagelink

v0.2.0

Published

npm link alternative tool

Downloads

170

Readme

@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 link does 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/packagelink

or install it globally

npm install -g @satispunk/packagelink

Single package

  • run packagelink publish from the local package root folder where package.json is present.
  • run packagelink install my-package-name from 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.js in 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.js in 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] [--dev]

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',
    ]
  },
}