官方说明
一个简单的例子
用户执行myapp
就会调用该包内的./cli.js
文件
更简单的用法
如果一个包只有一个命令,可以直接写
用户执行my-program
就会调用该包内的./path/to/program
文件夹
自己写一个
Please make sure that your file(s) referenced in bin starts with #!/usr/bin/env node, otherwise the scripts are started without the node executable!
- 官方提示,写的文件头部得加
#!/usr/bin/env node
,用于动态检测出不同用户各自的 node 路径并执行
一个简单的命令
新建一个本地仓库
mkdir webpack-bin-democd webpack-bin-demonpm init -ymkdir bin
新建一个简单的脚本bin/index.js
#!/usr/bin/env node// 获取命令的参数const args = processargvconsole
加入package.json
"bin": "./bin/index.js",
执行npm link
链接本地仓库
测试下刚写的命令
webpack-bin-demo// []webpack-bin-demo aaa// [ 'aaa' ]
假设我们只需要一个参数,并且先加1个万能的help
#!/usr/bin/env node// 获取命令的参数const args = processargv const help = `Command============================help: show help============================` if argslength const arg = args0 else console processexitCode = 1
然后看看成果
webpack-bin-demo help Command============================help: show help============================
加入一些命令
加入一些webpack
的常用命令
child_process (子进程)
-
child_process 模块提供了衍生子进程的功能
-
默认情况下,在 Node.js 的父进程与衍生的子进程之间会建立 stdin、stdout 和 stderr 的管道。 数据能以非阻塞的方式在管道中流通。 注意,有些程序会在内部使用行缓冲 I/O。 虽然这并不影响 Node.js,但这意味着发送到子进程的数据可能无法被立即使用。
-
child_process.spawn() 方法会异步地衍生子进程,且不会阻塞 Node.js 事件循环。 child_process.spawnSync() 方法则以同步的方式提供同样的功能,但会阻塞事件循环,直到衍生的子进程退出或终止。
先看下webpack
的写法,用到了spawn
,配合Promise
使用
#!/usr/bin/env node { const cp = ; return { const executedCommand = cp; executedCommand; executedCommand; };}
直接用spawnSync
const spawnSync = { }
spawnSync
编写一些简单的命令
使用#!/usr/bin/env nodeconst spawnSync = const commands = start: 'npm run dll && webpack-dev-server --config webpack/webpack.dev.js' fix: 'eslint src --ext .js,.vue --fix' dll: 'webpack --config webpack/webpack.dll.js' build: 'npm run dll && webpack --config webpack/webpack.prod.js' help: 'help' const runCommand = { if command === 'help' console console Object console process if command process else console processexitCode = 1 } // 获取命令的参数const args = processargv if argslength else console processexitCode = 1
在其他项目中使用
请配合webpack-demo体验
修改package.json
中的scripts
"scripts":