runtime-npm-install
v5.0.0
Published
Install npm modules programmatically at runtime
Downloads
7,278
Readme
runtime-npm-install
Install npm modules programmatically
key features
- under the hood, uses globally installed npm through
npm-install-to
- takes packages in the equivalent format as
npm install
@scope/name
name@tag/version
githubusername/repo
- etc.
- once installed packages will resolve instantly due to caching
install
npm install runtime-npm-install
usage
Provides two functions, of which npmInstallAsync
returns metadata of installed
modules, while npmImportAsync
returns a list of what installed modules export.
The argument installPath
determines where modules should be npm install
ed on
the file system. It defaults to a temporary directory, but should be given if
you wish subsequent invocations to either function to be quick. See
npm-install-to
for more on
the caching.
The argument of packages
is a list of package specs as strings, corresponding
to how npm install
command is given packages to be installed. More information
on that available with npm help install
.
API
npmInstallAsync(packages: string[], installPath?: string, npmInstallToOpts?: Object): Promise<...>
Installs specified packages, returning a promise that resolves to an object
containing output of npm install
and metadata of installed packages.
example
const { npmInstallAsync } = require('../')
const path = require('path')
const tmpDir = path.join(require('os').tmpdir(), 'my-app')
npmInstallAsync([
'[email protected]',
'lodash',
'[email protected]'
], tmpDir)
.then(console.log)
output
{ packages:
[ { spec: '[email protected]',
name: 'treis',
json: [Object],
path:
'/var/folders/5w/g91lyqdd20b4wsrb2r434nwr0000gn/T/my-app/node_modules/treis' },
{ spec: 'lodash',
name: 'lodash',
json: [Object],
path:
'/var/folders/5w/g91lyqdd20b4wsrb2r434nwr0000gn/T/my-app/node_modules/lodash' },
{ spec: '[email protected]',
name: 'ramda',
json: [Object],
path:
'/var/folders/5w/g91lyqdd20b4wsrb2r434nwr0000gn/T/my-app/node_modules/ramda' } ],
npmOutput:
'+ [email protected]\n+ [email protected]\n+ [email protected]\nadded 12 packages from 9 contributors and audited 15 packages in 1.492s\nfound 0 vulnerabilities' }
npmImportAsync(packages: string[], installPath?: string, npmInstallToOpts?: Object): Promise<...>
Installs specified packages, returning exports corresponding to each package as a list.
getPkgsToBeInstalled(packages: string[], installPath: string): Promise<string[]>
Use to check which given packages would be installed by either of the functions.
This function comes directly from npm-install-to
.
example
const { npmImportAsync } = require('runtime-npm-install')
;(async () => {
const [treis, _, R] = await npmImportAsync([
'[email protected]',
'lodash',
'[email protected]'
])
R.add(1, _.add(5, 1)) // 7
})()
demo of debug logging and cache
const { npmInstallAsync } = require('npm-install-to')
const path = require('path')
const taim = require('taim')
const tmpDir = path.join(require('os').tmpdir(), 'my-app')
console.log('tmpDir', tmpDir)
;(async () => {
await taim('first npmInstallAsync', npmInstallAsync)([
'[email protected]',
'lodash',
'[email protected]'
], tmpDir)
await taim('second npmInstallAsync', npmInstallAsync)([
'[email protected]',
'lodash',
'[email protected]'
], tmpDir)
})()