Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xavdid/typed-install
[Project] Easily install new packages and their types, every time.
https://github.com/xavdid/typed-install
npm typescript yarn
Last synced: 5 days ago
JSON representation
[Project] Easily install new packages and their types, every time.
- Host: GitHub
- URL: https://github.com/xavdid/typed-install
- Owner: xavdid
- Created: 2018-04-02T04:48:34.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-20T04:18:51.000Z (almost 2 years ago)
- Last Synced: 2024-10-03T12:22:47.991Z (about 1 month ago)
- Topics: npm, typescript, yarn
- Language: TypeScript
- Homepage:
- Size: 1.73 MB
- Stars: 99
- Watchers: 5
- Forks: 7
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# typed-install
[![npm](https://img.shields.io/npm/v/typed-install.svg?style=flat-square)](https://www.npmjs.com/package/typed-install)
You're writing Typescript and it's time to install your favorite node module. Has this ever happened to you?
```
% npm i my-module @types/my-module
npm ERR! code E404
npm ERR! 404 Not Found: @types/my-module@latestnpm ERR! A complete log of this run can be found in:
npm ERR! /Users/user/.npm/_logs/2018-03-31T23_41_37_683Z-debug.log
```It's hard to know if type declarations are included with the module, shipped separately, or non-existent. Enter `typed-install`.
## Installation and Usage
Install from npm using your favorite package manager.
```
% npm i -g typed-install
```Run it with the `typedi` command, passing any number space-separated package names (this should be very familiar).
```
% typedi heroku-config lodash striptags
✔ Installing Packages
✔ Checking for @types
✔ Installing Available TypesThe following packages were fully installed:
* lodash
* striptagsThe following packages were installed, but lack types:
* heroku-config
```By default, `typedi` guesses your preferred package manager (based on a lockfile), uses `npm` if there's no hint, saves packages into `dependencies`, and `@types` into `devDependencies.`. This is configurable with the following flags:
- **-d** | **--dev**: save packages into the `devDependencies`
- **-p** | **--prod**: save @types into `dependencies`
- **-m** | **--package-manager**: one of `npm`, `yarn`, or `pnpm`. Specifying one of these overwrites lockfile guessing.
- **-e** | **--exact**: install with an exact type instead of a caret (`^`). This overwrites your config files for the tool you're usingUsing `--dev` and `--prod` together will probably not do what you expect.
### Exceptions
As of the release of `v1.0.6`, the following packages ship with a stub types file, confusing this utility:
- `jest`
Those are always explicitly fetched. If you know of another example (or one of the above is shipping actual types) [file an issue](https://github.com/xavdid/typed-install/issues/new) and I'll add the exception.
### Using without installing
If you have `[email protected]` or greater installed, you can run this via `npx` ([more info](https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b)), a tool to run CLI packages without explicitly installing them. This is great for periodic or one time use.
The previous example becomes:
```
% npx typed-install heroku-config lodash striptags
```Similarly, if you're using `yarn@2`, you can use `yarn dlx` (see [the docs](https://yarnpkg.com/cli/dlx)).
If you're going to invoke this repeatedly or frequently, global installation is recommended.
## API
The code that powers `typedi` can also be used via the Node.js API.
The main function takes the following options, in order:
### modules (string[])
An array of npm module names
### opts (object, default `{}`)
an object with any of the following keys (see above):
- dev
- prod
- packageManager
- exactAny keys not present default to false.
### shouldSpin (boolean, default `false`)
Whether or not to run the fancy spinner. If you're using this in other code, this should probably be `false`. Also controls whether messages are logged.
```js
const typedi = require('typed-install').defaulttypedi(['lodash', 'striptags'], { dev: true }).then(() => {
console.log('all done!')
})
```