如何使用cli
在《写一个cli脚手架中》使用了npm link 来使用 my-cli 但是使用npm link 只是为了方便在开发的时候测试 但是我们要想在一个项目中使用脚手架的命令怎么用呢?
很简单 直接
npm install <cli-package-name>原理分析
但是为什么可以这样做呢? 我发现 npm install 的时候其实是做了两件事
- 根据package.json 安装项目依赖
- 在node_modules/.bin 下创建所有依赖项bin字段下所有命令的软链接
先将{prefix}/bin/{name}下的test2命令删除
比如 现在我在my-cli 同级目录下新建 test-my-cli 目录
mkdir test-my-clicd test-my-clinpm init -ynpm install ../my-cli
可以看到node_modules/.bin 下存在两个软链接
npm run-script
那么现在我们就可以执行my-cli中的命令了么? 直接执行test2 肯定不行(先将环境变量中的test2命令删除) 因为test2 是放在 node_modules/.bin目录下的 所以我们需要
./node_modules/.bin/test2
但是这样使用起来很麻烦 我们通常都不是这么用的 而是将命令写在package.json 中的scripts 字段中
"scripts": { "test": "test2 init aaa"}然后再运行 npm run test 也可以执行test2 命令

那么这是为什么呢?为什么放在scripts 中就可以执行test2命令了?
In addition to the shell’s pre-existing PATH, npm run adds node_modules/.bin to the PATH provided to scripts. Any binaries provided by locally-installed dependencies can be used without the node_modules/.bin prefix.
For example, if there is a devDependency on tap in your package, you should write:
"scripts": {"test": "tap test/\*.js"}instead of
"scripts": {"test": "node_modules/.bin/tap test/\*.js"}原来是npm run 的时候将当前目录下的 node_modules/.bin 添加到了环境变量中