基于原生开发脚手架
脚手架开发流程
- 创建 npm 项目
- 创建脚手架入口文件,最上方添加:
#!/usr/bin/env node
- 配置 package.json,添加 bin 属性,设置脚手架命令执行该入口文件
- 编写脚手架代码
- 将脚手架发布到 npm
注意:如果执行 npm i 命令所在的目录是脚手架的父级目录,安装后 lib/node_modules 中的包会指向本地的脚手架。也就是说本地更改代码后,指向命令其结果也会改变,方便本地调试。如果不想这样,执行安装命令时请更改目录。
脚手架的本地调试方法
除了上述方法,还可以使用 npm link
的方式进行本地 npm 包开发。
进入本地 npm 包所在目录,运行命令 npm link
,就会在 /usr/local/lib/node_modules
目录下加入本地包,并且在 /usr/local/bin
目录中创建软链接。
cd zjw-test
npm link
ll /usr/local/bin/zjw-test
# lrwxr-xr-x 1 zhoujiawei wheel 41B 12 26 19:15 /usr/local/bin/zjw-test -> ../lib/node_modules/zjw-test/bin/index.js
ll /usr/local/lib/node_modules
# lrwxr-xr-x 1 zhoujiawei wheel 44B 12 27 00:20 zjw-test -> /Users/zhoujiawei/Desktop/脚手架/zjw-test
如果本地 npm 包开发过程中还依赖本地另外一个 npm 包,又该怎么处理呢?
假设两个包为: zjw-test、zjw-test-lib,zjw-test 依赖 zjw-test-lib。
- 进入 zjw-test 目录,执行 npm link
- 进入 zjw-test-lib 目录,执行 npm link
- 此时,两个包都别加入到 lib/node_modules 中了,再在 zjw-test 中执行 npm link zjw-test-lib,相当于安装了依赖包 zjw-test-lib
- 在 package.json 中,更改版本号,删除 node_modules,执行 npm i,重新安装依赖包。
cd zjw-test-lib && npm link
cd zjw-test && npm link && npm link zjw-test-lib && rm -rf node_modules && npm i
如果先在 zjw-test-lib 中执行 npm unlink,再在 zjw-test 执行 npm unlink zjw-test-lib 会报文件不存在的错误。
当 zjw-test-lib 开发完成后需要发布,操作如下:
- 进入 zjw-test 目录,执行 npm unlink zjw-test-lib
- 进入 zjw-test-lib 目录,执行 npm unlink,修改 version,执行 npm publish
- 进入 zjw-test 目录,执行 rm -rf node_module,重新安装依赖,执行 npm publish
- 发布成功后重新安装全局 zjw-test
总结
- 链接本地脚手架:
cd your-cli-dir
npm link
- 链接本地库文件:
cd your-lib-dir
npm link
cd your-cli-dir
npm link your-lib
- 取消链接本地库文件:
cd your-lib-dir
npm unlink
cd your-cli-dir
# link存在
npm unlink your-lib
# link不存在
rm -rf node_modules
npm install -S your-lib
理解 npm link:
- npm link:将当前项目链接到 node 全局 node_modules 中作为一个库文件,并解析 bin 配置创建可执行文件
- npm link your-lib:将当前项目中 node_modules 下指定的库文件链接到 node 全局 node_modules 下的库文件
理解 npm unlink:
- npm unlink:将当前项目从 node 全局 node_modules 中移除
- npm unlink your-lib:将当前项目中的库文件依赖移除