命令行执行原理

  1. 全局可执行命令(如:webpack、tsc、create-react-app、vue)路径 /usr/local/bin ,这些全局命令实际上是软链接到 /usr/local/lib/node_modules对应的包 , 找到对应的包的 bin目录执行对应的文件;
  2. node相当于是操作系统的客户端,全局命令相当于node的可执行文件;
  3. 在某个包下执行 npm link,相当于将该包软链接到全局的可执行命令中;
  4. 开发调试时, A 包中引用本地的 B 包步骤:
    1. 在 B 包路径下执行 npm link软链接到全局;
    2. 在 A 包路径下执行 npm link B本地软链接到 B 包;
    3. 开发调试完毕,npm publish时,先在 A 包路径下执行 npm unlink B , 将 B 包依赖添加到 package.json中,在 B 包路径下执行npm unlink B / npm uninstall -g B
  5. 为什么全局输入 vue、tsc、create-react-app 命令,可以执行一些操作?
    1. 实际上是执行了 node vue xxx;
    2. 注册为全局可执行指令,需要在文件顶部指定 #!/usr/bin/env node;

命令行参数解析

  1. 使用 process下的 argv可以拿到命令行输入的参数;

lerna

使用场景:解决开发大型项目,项目依赖的各个模块之间的耦合依赖问题以及各包的版本管理问题
lerna官网
github
一些常用命令记录命令:

  1. lerna add packageA在所有的 packages 中安装 packageA 包;
  2. lerna add packageA packages/core在 core 包中安装 packageA 包;
  3. lerna clean清理所有 packages 的 node_modules;
  4. lerna bootstrap安装所有 packages 的依赖;
  5. lerna publish发布;

commander 命令行工具

commander 中文文档