Say goodbye to npm install, no need npm install, throw away npm install.
example
In your project,
- add
npx -y ai-installto package.json->scripts->start/build.
{
"name": "ai-install-demo",
"scripts": {
"start": "npx -y ai-install && xxx serve --open",
"build": "npx -y ai-install && xxx build"
},
"devDependencies": {
"xxx": "x.y.z"
}
}
- add a new file npm-start.sh, the content is:
npm start
After git clone, just double click npm-start.sh to start, no typing command.
because
npx -y ai-install
executing npm install if not installed.
npx run an arbitrary command from an npm package (either one installed locally, or fetched remotely).
think
Does it save a second of typing npm i? no!
After the installation of npm i, it was not seamlessly connected to npm start, which wasted 10 ~ 60 seconds.
If you use npx -y ai-install, then npm start will likely start a minute earlier.
yarn & pnpm
npx -y ai-install
In yarn project, auto executing yarn install if not installed.
In pnpm project, auto executing pnpm install if not installed.
src
package.json defined a commond ai-install.
{
"name": "ai-install",
"version": "1.0.0",
"description": "Say goodbye to `npm install`, no need `npm install`, throw away `npm install`.",
"main": "index.js",
"bin": {
"ai-install": "index.js"
}
}
index.js executing npm/yarm/pnpm install if not installed.
#!/usr/bin/env node
var fs = require('fs');
var child_process = require('child_process');
if (!fs.existsSync('node_modules')) {
if(fs.existsSync('yarn.lock')){
child_process.execSync('yarn install', { stdio: 'inherit' });
} else if (fs.existsSync('pnpm-lock.yaml')){
child_process.execSync('pnpm install', { stdio: 'inherit' });
} else {
child_process.execSync('npm install', { stdio: 'inherit' });
}
}
Top comments (4)
It doesn't handle Monorepos with multiple
node_modulesfolder.I think Monorepos is only one node_modules folder.
if there are many node_modules, you can add 'npx -y ai-install' in every scripts or run 'npx -y ai-install' at every package.json dir.
This only checks for the presence of a
node_modulesdirectory, so you'll still have to manually run the install command after pulling changes or switching branches or whatnot.It is suitable for small projects and package.json does not change frequently.